All use cases

There's no Instagram RSS feed. Here's what actually works.

No official Instagram RSS. Monitors polls public posts, diffs, and delivers signed webhooks or pullable JSON events — no login, no scraper bridge.

What usually breaks first

Common failure modes after a DIY scraper or marketplace API hits production — schema drift, billing surprises, and pagination quirks.

Instagram has no official RSS. Third-party bridges scrape the site, break on redesigns, and often ask for your login.

No RSS/Atom here either. GET /v1/instagram/profiles/{handle}/posts reads public posts; Monitors diffs on a schedule and delivers signed webhooks or pullable JSON events. Metered per-check pricing; stable schema and retried delivery.

6 routes for this job

These are the Instagram and Monitors routes that replace what an RSS-bridge scraper did — reading posts, and getting notified of new ones.

  • GET /v1/instagram/profiles/{handle}

    Public profile lookup — bio, follower count, verification, privateAccount — before you commit to watching an account.

  • GET /v1/instagram/profiles/{handle}/posts

    Recent posts for a profile, cursor-paginated — the same feed a browser sees, the underlying source the RSS-feed workaround was trying to replicate.

  • GET /v1/monitors/sources

    Discover the watchable operationId for Instagram posts (instagram.profile.posts.list), its minimum interval, and a sample event.

  • POST /v1/monitors

    Create a monitor on a profile's posts — the "subscribe to this feed" step, delivered as a signed webhook instead of an RSS entry.

  • POST /v1/webhook-endpoints

    Create the delivery target: a real URL, or a hosted test inbox (kind: "sink") to see it work with nothing deployed yet.

  • GET /v1/monitors/{id}/events

    Pull new-post events directly, cursor-paginated — the closest thing to polling an RSS feed, if you'd rather not run a webhook receiver at all.

OpenAPI reference →

How teams wire this

Typical order starts with “confirm the account is public and worth watching.” Adjust cadence, schema, and thresholds to your stack.

  1. 1

    Confirm the account is public and worth watching

    GET /v1/instagram/profiles/{handle} tells you privateAccount and lookupStatus before you schedule anything against it — private accounts won't produce new-post events.

  2. 2

    Read the feed once, the normal way

    GET /v1/instagram/profiles/{handle}/posts returns recent posts, cursor-paginated. This is the source of truth Monitors diffs against, so it's worth understanding the shape first.

  3. 3

    "Subscribe" by creating a monitor

    POST /v1/monitors with instagram.profile.posts.list, the handle, and a schedule. Creation runs a synchronous baseline, so posts already there don't fire a false new_items event.

  4. 4

    Pick push or pull

    Attach a webhook endpoint for push delivery, or leave webhookEndpointId unset and pull GET /v1/monitors/{id}/events on your own cadence — a valid pull-only monitor, the closest match to RSS polling behavior.

  5. 5

    Verify signed deliveries over the raw body

    If you're using webhooks, verify with verifySignature or constructEvent from @socialfetch/sdk/webhooks before parsing — the signature is computed over the exact request bytes.

  6. 6

    See it work before you build a reader for it

    A hosted test inbox or npx socialfetch listen --forward-to <local-url> lets you see a real signed new_items event before you've written any consumption code at all.

Read a profile's recent posts — the feed Monitors diffs against.

Swap YOUR_API_KEY for a dashboard key. The playground pre-fills auth for the same path.

Request
Read a profile's recent posts — the feed Monitors diffs against.

Why Monitors over an RSS-bridge scraper

  • Never asks for your Instagram login — reads public data the same way a signed-out browser would.
  • A documented, versioned JSON schema instead of scraped HTML selectors that silently break on Instagram's next redesign.
  • Push delivery is signed and retried — 8 attempts over roughly 21 hours on failure — instead of a bridge's fixed poll interval with no delivery guarantee at all.
  • Would rather poll than run a webhook receiver? GET /v1/monitors/{id}/events is a cursor-paginated JSON feed you can treat exactly like an RSS reader treats a feed URL.
  • A hosted test inbox and the socialfetch listen CLI let you see a real event before you've deployed anything.
  • Transparent per-check credit pricing instead of a free bridge whose maintainer is quietly absorbing scraping risk you can't see.

Try the Instagram RSS alternative on free credits

100 free credits — read a profile's posts, then create a monitor and watch a signed webhook (or a pull feed) do the job RSS never could for Instagram.