| title | GitHub integration |
|---|---|
| description | Connect Apify with GitHub to build Actors from a repository, rebuild on every push, and create issues automatically when an Actor run fails. |
| sidebar_label | GitHub |
| sidebar_position | 3 |
| slug | /integrations/github |
import ThirdPartyDisclaimer from '@site/sources/_partials/_third-party-integration.mdx';
With the Apify integration for GitHub, you can create an Actor from a public or private repository, rebuild it automatically on every push, and trigger workflows in your repo when an Actor run fails, succeeds, or times out. To run automated tests and multi-branch builds with GitHub Actions, see Continuous integration for Actors.
To use the GitHub integration, you need:
- An Apify account.
- A GitHub account with access to the repository you want to link.
Follow these steps to build a new Actor from code hosted on GitHub.
In Apify Console, go to Actors and click Develop new.
Under Link a Git repository, click GitHub. Follow the prompts on github.com to authorize Apify. You can grant access to your personal account, an organization, or specific repositories.
To switch between authorized users and organizations, use the account dropdown.
Pick the repository you want to link. If you don't see it, use the Search field to find it by name.
Apify creates the Actor as soon as you select a repository, links its source to the repository, and uses the default branch unless you change it in the Actor's Source settings.
:::tip Private repositories
For private repositories, configure a deployment key so Apify can clone the code.
:::
{/* REVIEWER QUESTION: The "Link a Git repository" panel says "set Apify to automatically build the Actor on changes", which suggests the native GitHub flow above already wires up auto-builds on push. If so, the manual GitHub webhook recipe below is now the legacy/advanced path. Please confirm the current behavior and let me know whether to (a) keep the manual recipe as-is, (b) replace it with a one-line note + link to CI for Actors, or (c) keep both with a short "the flow above already triggers builds; use this for finer control" intro. */}
After you link an Actor to a GitHub repository, add a webhook in GitHub to trigger a new build on every push:
-
In Apify Console, open the Actor's API tab and select API Endpoints. Copy the Build Actor endpoint URL. It has this format:
https://api.apify.com/v2/acts/YOUR-ACTOR-NAME/builds?token=YOUR-TOKEN&version=0.0&tag=latest&waitForFinish=60:::note API token
Select the correct API token in the dropdown before copying the URL.
:::
-
In the GitHub repository, go to Settings > Webhooks > Add webhook.
-
Paste the URL into Payload URL, set Content type to
application/json, and save.
Every push to the repository now triggers a build of the linked Actor version.
For automated tests and multi-branch workflows (for example, separate latest and beta tags), follow the Continuous integration for Actors guide.
Use an Apify webhook to call the GitHub REST API and open an issue in your repository whenever an Actor run finishes with the FAILED status. This lets you triage failures in the same place you track other work.
- An Apify Actor you can run.
- A GitHub repository where the issues are created.
- A GitHub fine-grained personal access token with Issues: Read and write permission scoped to the target repository.
- In GitHub, open Settings > Developer settings > Personal access tokens > Fine-grained tokens and click Generate new token.
- Set Repository access to Only select repositories and pick the repository where you want issues to be created.
- Under Repository permissions, set Issues to Read and write.
- Generate the token and copy it. You'll paste it into the webhook headers in Step 3.
:::warning Treat the token as a secret
Anyone with this token can create issues in the selected repository. Don't commit it or share it in screenshots.
:::
-
In Apify Console, open the Actor and go to the Integrations tab.
-
Under Connect with Apify, click HTTP webhook.
-
Configure the webhook:
- Event types: select
Run failed(ACTOR.RUN.FAILED). - URL:
https://api.github.com/repos/OWNER/REPO/issues, replacingOWNERandREPOwith your repository details.
- Event types: select
In the same webhook form, configure the request that GitHub expects.
Set Headers template to authenticate with the personal access token and tell GitHub which API version to use:
{
"Authorization": "Bearer YOUR_GITHUB_TOKEN",
"Accept": "application/vnd.github+json",
"X-GitHub-Api-Version": "2022-11-28"
}Enable Interpolate variables in string fields, then set Payload template so the issue title and body include the failed run details:
{
"title": "Actor run {{resource.id}} failed",
"body": "Actor [{{resource.actId}}](https://console.apify.com/actors/{{resource.actId}}) finished with status `{{resource.status}}`.\n\nRun: https://console.apify.com/actors/{{resource.actId}}/runs/{{resource.id}}\nStarted: {{resource.startedAt}}\nFinished: {{resource.finishedAt}}\nExit code: {{resource.exitCode}}",
"labels": ["actor-failure"]
}For the full list of variables you can use, see Webhook actions.
- Click Save to add the webhook.
- Click Test to send a sample payload to the GitHub API. Verify a new issue appears in the repository.
- Trigger a real failure (for example, by aborting a run that's configured to fail or by running the Actor with invalid input) and confirm an issue is created.
If the test fails, check the webhook Dispatches log for the response from GitHub. Common causes are an expired token, missing repository permissions, or a typo in the repository path.
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/jZUp-rRbayc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>- Source types for Actors - Configure the Git URL, branch, and monorepo paths.
- Continuous integration for Actors - Run tests and trigger builds with GitHub Actions.
- Webhook events and actions - Reference for available events and the payload template.




