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 Pro and hosting where a Site Sync receiver can run; see Site Sync by platform.
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.
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. Choose how the feed reaches your website
Quick setup embed: all plans. Paste the placeholder and script from the display builder. OwnFeed serves the display and images each time a visitor loads the page.
Site Sync: Pro. OwnFeed delivers a saved copy to a receiver on your own hosting, on a schedule, and your website serves it. Existing Free accounts keep the one Site Sync destination they already had.
A hosted iframe and the JSON feed are also available on every plan; see other ways to publish.
4. Site Sync by platform
Site Sync receivers are in release testing and are enabled platform by platform; the Site Sync page in your dashboard shows which ones your account can use. Wix, Squarespace and websites whose platform cannot be identified use the Quick setup embed. Webflow and Shopify are not supported yet. Creating a connection, downloading your PHP folder or starting an installation asks for your password and authenticator code.
Websites proxied by Cloudflare
The Cloudflare route receiver runs in your own Cloudflare account on your website's hostname and places the saved feed into the pages you choose. In Site Sync, choose Cloudflare and enter your account and zone IDs, your website address, up to ten pages and a one-time API token created from the template link; OwnFeed uses the token once and never stores it. Put <div data-ownfeed="YOUR_DISPLAY_ID"> where the feed belongs. R2 must be enabled in your account, and your zone should use Full (strict) SSL/TLS.
Advanced manual setup is also possible: create a Worker, a D1 database bound as STATE, a KV namespace bound as ACTIVE and a private R2 bucket bound as COPY, apply the receiver migrations, and store the one-time key as the CONNECTION_KEY Worker secret, never in browser code or a public repository.
WordPress
Install the OwnFeed Site Sync plugin, start pairing from Settings → OwnFeed Site Sync, approve the display in OwnFeed, then use Test connection. Add the OwnFeed block or the [ownfeed] shortcode where the feed belongs. The plugin needs a single-site WordPress at your domain's root with pretty permalinks, InnoDB tables and uploads on the same address; other setups use the Quick setup embed.
PHP hosting
Download your personalized ownfeed/ folder from the dashboard, upload it to your website's root and open /ownfeed/setup.php. The download contains your connection key: keep it private and delete it after uploading. Choose pages with a marked section or a PHP include. A marked static page keeps its saved copy until the next update or removal, even after the copy's licence ends, and several pages are updated one at a time.
Sites deployed from Git
For Netlify, Vercel, GitHub Pages or Cloudflare Pages sites built from a GitHub repository, the OwnFeed GitHub App commits the saved feed to a branch you choose and your host deploys it as usual. It becomes available once the App is published. Each commit can start a build on your host, and a commit is not proof that your site has deployed.
Moving from the Quick setup embed
Keep the embed in place until your first Site Sync delivery is confirmed, then remove the Quick setup script from the page. If the script stays, it shows the hosted copy and your visitors load it from OwnFeed again.
5. Verify the connection and choose a schedule
Site Sync verifies the receiver, then delivers on the schedule you choose. 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 keep one destination with hourly, six-hourly, twelve-hourly or daily delivery. Git-deployed sites update at most hourly and daily by default.
Your dashboard shows installed, verified and first delivery confirmed separately, with the last source check and last delivery. Then open the page on your website: images, styles and any controls for the saved display come from your website's own address.
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
These options are available on every plan, including Free.
Quick setup embed
Paste one placeholder and one script tag from the display builder. The script loads the display from OwnFeed when a visitor opens the page and places it inside the placeholder. Nothing is installed on your hosting.
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.
Each saved copy carries a licence that runs 21 days from its last successful update. The Cloudflare, WordPress and PHP include receivers hide an expired copy; a marked static PHP page and files deployed from Git keep showing it until they are updated or removed.
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, browser caches, Git history and deployment caches 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.