For a few posts, use Instagram's own embed code for each post or reel and paste it into an HTML block on your page. For a self-updating grid, you need either a feed widget service or your own connection through Meta's Instagram API, since the old Basic Display API stopped working on December 4, 2024.
| Approach | Updates itself? | Effort |
|---|---|---|
| Official embed per post or reel | No, one post each | Copy and paste |
| Feed widget service | Yes | Sign up, connect the account, paste a snippet |
| Your own Instagram API connection | Yes | A developer, a Meta app and a server |
| Link or button to your profile | Not needed | Minutes |
Updated
Paste an Instagram link to check whether Meta's oEmbed endpoint accepts that kind of URL, and see the request a developer would make for its embed code. The checker only reads the shape of the link in your browser. It does not contact Instagram, so it cannot tell whether the account is private.
Instagram link: https://www.instagram.com/p/EXAMPLE123/
The sample link is made up.
A post (single image or carousel). oEmbed accepts this format.
oEmbed request a developer would make
GET https://graph.facebook.com/instagram_oembed?url=https%3A%2F%2Fwww.instagram.com%2Fp%2FEXAMPLE123%2FMeta's oEmbed documentation explains the app access needed to call it.
Paste Instagram's embed code for each post inside the container without its script tag, then load the script when the visitor scrolls close.
Set EMBED_SCRIPT to the script address in the embed code Instagram gave you. instgrm.Embeds.process() turns the pasted blockquotes into embeds.
// Paste the script src from the embed code Instagram gave you.
const EMBED_SCRIPT = "PASTE_SCRIPT_SRC_FROM_YOUR_EMBED_CODE";
const feed = document.querySelector("#instagram-feed");
const observer = new IntersectionObserver((entries) => {
if (!entries.some((e) => e.isIntersecting)) return;
observer.disconnect();
const s = document.createElement("script");
s.src = EMBED_SCRIPT;
s.async = true;
s.onload = () => window.instgrm && window.instgrm.Embeds.process();
document.body.appendChild(s);
}, { rootMargin: "400px" });
observer.observe(feed);
Many older tutorials and free plugins relied on the Basic Display API, which let any personal account share its photos with a website. Meta switched it off on December 4, 2024, which is why some feeds that worked for years suddenly went empty.
Today a live feed goes through the Instagram API for professional accounts. Widget services handle that connection for you; building it yourself means a Meta app, tokens and a server to fetch posts.
Embeds pull in third-party script and full-size media. Put them below the first screen, and load the script only when the visitor scrolls near the feed, as the example below does.
No. Meta announced that from December 4, 2024 the Basic Display API would no longer be available and requests to it would fail. Meta pointed business use to the Instagram API with Instagram Login or with Facebook Login.
Meta's oEmbed endpoint lists profile URLs, in the form instagram.com/username, among the accepted formats, alongside posts and reels.
The embed relies on the script tag at the end of the embed code Instagram gives you. If the script is blocked, removed by your builder, or the HTML was added after it loaded, call instgrm.Embeds.process() once the script is on the page.
Single post embeds come from public posts. API connections for a live feed are built around professional (business or creator) accounts.
Widgets need permission to read your account. Use a well-known service, read what access it asks for, and remove it in your Instagram settings if you stop using it.
Related: How to sell on Instagram, Grow your Instagram following, Social media image sizes, Iframe generator, Instagram marketing strategy.
Start for free or see all free tools. We.Inc is free to start, with no card needed. AI building is on paid plans from $20 a month.
We.Inc is an AI-powered website builder you can resell under your own brand. Launch a branded client dashboard, bill on Stripe Connect, and deliver AI-generated websites in minutes. White-label plans start at $99 a month for 25 client sites, with a 7-day free trial and no per-site fees.