Open source · No server required

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.

Public 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 copy

Choose 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

  1. Get a Telegram bot from BotFather. Save its token as the GitHub Actions Secret TELEGRAM_BOT_TOKEN.
  2. Get an Apify API token. Save it as the Secret APIFY_TOKEN.
  3. 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.
  4. Run once with dry_run=true to test without publishing. New content will then be checked about every six hours.
  5. Optional: set variable ALERT_CHAT_ID to 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.