OwnFeed
Menu
SETUP GUIDE

From your posts
to a saved website feed.

The connector includes the rendering and cache-update work. Setup connects that receiver to your hosting.

Before you start

You need an OwnFeed account, an eligible Instagram Business or Creator account, and permission to publish that account's content. Site Sync additionally needs a Cloudflare account where you can configure a Worker, D1 and a private R2 bucket.

OwnFeed must have its production Instagram and security integrations enabled before a real account can connect. Local previews and illustrated samples do not authorize an Instagram account.

Choose how the feed will appear on your existing website. The included receiver serves a complete feed page; placing the saved content inside another page needs compatible hosting integration. It does not automatically modify a website builder's pages.

1. Connect Instagram and create a feed

Create and verify your OwnFeed account, then open Instagram accounts. Authorize your professional account through Instagram. Your Instagram password is never entered into OwnFeed.

In Feeds, choose the account, name the source feed and set its allowed browser origin. Wait for the first successful source refresh. Use Posts to hide items you do not want displayed.

Videos and Reels display their thumbnails; Instagram carousel posts display their cover image. A layout named “Carousel” controls the website presentation and does not expand an Instagram carousel album.

2. Choose and publish a display

Open Displays, select a source feed, and choose one of the six layouts. Free includes grid and compact strip layouts with colours and spacing. Preview all layouts, advanced design controls and post curation, save a draft, then upgrade to Pro to publish those options.

Draft edits do not replace the published design until you publish them. Several saved displays can share the same source feed. A published display is required before adding a Site Sync destination.

3. Configure the included Cloudflare receiver

The first connector is included in the OwnFeed project under connectors/cloudflare. Use the receiver and migration from the same release as your OwnFeed installation. A guided one-click installer is not included in this release.

  1. Create the receiver's resources in your Cloudflare account. Configure a Worker, a D1 database bound as STATE, and a private R2 bucket bound as COPY. Apply the included receiver database migration. Review any charges before creating resources.
  2. Choose the receiver URL on your hosting. The receiver accepts scheduled deliveries at /ownfeed/receive and serves the saved feed page at /ownfeed/. Use HTTPS for a live connection. Keep production local-development mode disabled.
  3. Add a website in OwnFeed. Open Site Sync, choose the published display, give the destination a name and enter its HTTPS receiver URL. Confirm the sensitive action with your account credentials.
  4. Save the one-time connection key. OwnFeed returns a connection ID, OwnFeed origin and a connection key shown once. Configure CONNECTION_ID and OWNFEED_ORIGIN in the receiver. Store CONNECTION_KEY as a Worker secret, never in browser code or a public repository.
  5. Deploy your configured receiver. The receiver handles signed deliveries, local storage, complete-copy replacement, display styles and media paths. You do not need to build a visitor-triggered refresh or write caching/optimization logic.

Your hosting configuration must preserve the receiver's routes and privacy restrictions. If your website lives on another platform, confirm an integration path before choosing Site Sync; hosted iframe or JSON may be the appropriate alternative.

4. Verify the connection and choose a schedule

Back in Site Sync, verify the destination, then choose a delivery interval. Free updates weekly. Pro supports every 15 minutes, hourly, every six or 12 hours, daily or weekly. Source refresh and website delivery are separate settings; matching schedules deliver after a successful source check. Existing Free accounts retain hourly updates.

Use the first delivery to check the result. Confirm the last successful source check and delivery in your dashboard, then open the feed page on your receiver. Images, styles and any controls for that saved display are served from your receiver's origin.

Ordinary page visits do not request a fresh Instagram feed or contact OwnFeed. Updates happen during delivery. Opening an Instagram post link can take the visitor to Instagram.

Other ways to publish

Hosted display

Publish a display and use its hosted iframe option. OwnFeed serves that iframe and its media when a visitor loads it. This is distinct from a customer-owned Site Sync copy and does not place the feed directly in the parent page's initial HTML.

Hosted JSON

Your feed URL returns a predictable JSON object with a generation time and posts. Published displays also provide filtered JSON views. Use a supported integration or an existing server/client implementation that consumes that contract.

View the JSON shape
{
  "generatedAt": "2026-09-14T12:00:00.000Z",
  "posts": [{
    "id": "example-media-id",
    "caption": "Your caption",
    "permalink": "https://www.instagram.com/p/example/",
    "timestamp": "2026-09-14T11:00:00.000Z",
    "mediaType": "IMAGE",
    "sizes": {
      "small": { "mediaUrl": "https://your-feed-host/media/example/400.webp" },
      "medium": { "mediaUrl": "https://your-feed-host/media/example/700.webp" }
    }
  }]
}

This is a schema illustration, not a live endpoint. On Free, medium resolves to the same 400px image as small.

Public URLs are not private credentials. Origin restrictions govern which browser origins may read a feed; CORS is not authentication, and server clients can omit Origin. Do not publish confidential content.

Freshness, failures and removal

A failed Instagram source refresh keeps the last complete feed. A failed Site Sync delivery keeps the receiver's last successful copy. The dashboard distinguishes source age, delivery age and failures so you can see whether a recent delivery contains older posts.

A successful source refresh detects changes and removals. A later successful delivery carries those changes to your receiver. Verified empty source results can produce an empty display.

Pausing delivery leaves the saved website copy in place. To remove it, use the explicit removal action and confirm the receiver's acknowledgment. An unreachable destination cannot confirm removal; check its status and remove the copy on your hosting when needed. Previously downloaded or independently copied content cannot be recalled.

Disconnecting Instagram normally starts a provisional seven-day retention grace in OwnFeed, with an immediate-removal option. Reconnect before expiry to keep that connection's cached feed. Account deletion, destination copies and vendor-held records have separate steps explained in the Privacy notice and Help.

Ready for your first display?Open Displays