Connect Instagram to Telegram
Automatically cross-post new photos, Reels and carousels from a public Instagram profile. A guided setup for GitHub Actions and Apify. Your account details stay in your browser.
1 Create your repository
Create a repository from the template. For automatic reposting, a private copy is the easiest way to avoid GitHub's 60-day inactivity cutoff for public repositories.
Private copy · Recommended
No 60-day public-repository schedule cutoff. Uses your GitHub Actions minutes (GitHub Free includes 2,000 minutes/month, shared with your other private workflows).
Create private copyPublic copy
Standard hosted runners are free, but GitHub may disable scheduled checks after 60 days without repository activity. See the maintenance options first.
Create public copyChoose Use this template rather than Fork for a fresh deployment. A fork stays public and scheduled Actions are disabled until you enable them yourself. Keep only the default branch when creating a template copy.
A new repository still needs your Telegram and Apify secrets and a first-run initialization. GitHub Actions may also require enabling depending on account settings. Compare all deployment options.
Enter your repository URL after creating it.
2 Add your channels
Use one row per Instagram profile → Telegram channel pair. Accounts must be public. Add the bot as a channel administrator with posting permission.
To send the same Instagram profile to several channels, use separate repository deployments. We prevent duplicate usernames in one setup to avoid collisions in the duplicate tracker.
3 Copy the configuration
Open Settings → Secrets and variables → Actions → Variables in your new repository (or use the direct link in step 1). Create ACCOUNTS_JSON with the value below.
Add your first account and select Generate configuration.
4 Add two secrets and run
- Get a Telegram bot from BotFather. Save its token as the GitHub Actions Secret
TELEGRAM_BOT_TOKEN. - Get an Apify API token. Save it as the Secret
APIFY_TOKEN. - Check the Actions tab and enable the workflow if GitHub asks. Run Instagram to Telegram → Run workflow with
initialize_only=true. This records old posts without sending them. - Run once with
dry_run=trueto test without publishing. New content will then be checked about every six hours. - Optional: set variable
ALERT_CHAT_IDto a Telegram chat that should receive alerts after two consecutive failed syncs.
GitHub Actions checks on its built-in six-hour schedule even when Instagram has no new posts. Private copies avoid the public repository 60-day inactivity cutoff, but schedules are best-effort and can still fail for other reasons. For public deployments, see the keepalive and external-cron options.
The wizard never asks you to paste a token or stores your entered accounts on a server. Apify has separate usage charges; check its pricing before enabling your workflow.