Embed Instagram Posts Documentation

A Joomla site module that displays public Instagram posts through Instagram’s official embed. No API key, app registration or account login required.

Version 1.0.0 · Joomla 4.4 / 5 / 6 · PHP 8.1+ · GPLv2+ · by Saint Art Designs

Contents

  1. Overview
  2. Requirements
  3. Installation
  4. Creating the module
  5. Using a manual list of posts
  6. Using an RSS bridge feed
  7. All configuration options
  8. Render modes explained
  9. Styling & CSS customisation
  10. Caching behaviour
  11. Troubleshooting
  12. FAQ
  13. License

1. Overview

Embed Instagram Posts resolves a list of Instagram post permalinks and renders each one using Instagram’s public embed. Because it never talks to the Instagram Graph API, there is nothing to authenticate: you do not create a Meta app, you do not generate tokens, and there is no token expiry to maintain. The only requirement is that the posts are public.

Permalinks come from one of two sources, selected with the Post source option:

  • Manual list – you paste post URLs directly.
  • RSS bridge feed – the module fetches an RSS feed and extracts Instagram links from it automatically.

2. Requirements

Joomla 4.4, 5.x or 6.x
PHP 8.1 or newer
Posts Must be public (private accounts cannot be embedded).
Outbound HTTP Required only in RSS mode, so the server can retrieve the feed.

3. Installation

  1. Log in to the Joomla administrator.
  2. Go to System → Install → Extensions.
  3. On the Upload Package File tab, drop mod_embed_instagram_posts-1.0.0.zip or browse for it.
  4. Wait for the “Installation successful” message.

To update later, install the newer ZIP the same way — the package uses method="upgrade", so it installs over the existing version without losing your settings.

4. Creating the module

  1. Go to Content → Site Modules and click New.
  2. Select Embed Instagram Posts from the list.
  3. Give it a title (or hide the title), choose a Position, and set Status to Published.
  4. On the Menu Assignment tab, choose where it should appear (all pages or specific menu items).
  5. Configure the options (below) and click Save.

Helix Ultimate / template positions: a module only renders if its position is actually output by the active template. If you see nothing on the front end, verify the position first – see Troubleshooting.

5. Using a manual list of posts

  1. Set Post source to Manual list of post URLs.
  2. In Post URLs, paste one URL per line, for example:
https://www.instagram.com/p/DbC3mk_inwo/
https://www.instagram.com/reel/Cxyz1234abc/
https://www.instagram.com/username/p/DdEf5678ghi/

Post, reel and IGTV (/tv/) URLs are all accepted, with or without the username in the path. Duplicate posts are removed automatically, and the module shows at most Number of posts items.

6. Using an RSS bridge feed

Instagram does not provide RSS itself, so RSS mode relies on a third-party bridge that turns an Instagram profile into an RSS feed (for example RSS.app or FetchRSS). The module then reads that feed and pulls out the Instagram links.

  1. Create a feed for your Instagram profile in the bridge service.
  2. Copy the direct feed URL – the one that returns XML. On RSS.app this is the RSS Feed URL and usually ends in .xml, e.g. https://rss.app/feeds/XXXXXXXX.xml.
  3. Set Post source to RSS bridge feed URL and paste the URL into RSS feed URL.
  4. Save.

Most common mistake: pasting the feed’s share / preview page link (e.g. https://rss.app/r/feed/…) instead of the direct .xml feed. The preview page returns HTML, not a feed, so the module finds no Instagram links and shows nothing. Always use the URL that ends in .xml.

The module requires the feed items to contain real Instagram permalinks (instagram.com/p/…, /reel/… or /tv/…). Some free bridges rewrite item links to their own redirect domain – if so, the module cannot detect the posts.

7. All configuration options

Source

OptionDefaultDescription
Post source Manual Where permalinks come from: manual list or RSS bridge feed.
Post URLs Manual mode: one Instagram post/reel/IGTV URL per line.
RSS feed URL RSS mode: the direct feed URL (usually ending in .xml).
Number of posts 3 Maximum posts to display (1–24).
Cache time (minutes) 60 RSS mode only: how long the fetched feed is cached before refetching (5–10080).
Profile URL Optional link to your Instagram profile, used by the follow link.

Layout

OptionDefaultDescription
Render mode Iframe iframe (no external script) or Instagram embed.js. See below.
Show captions Yes Include the post caption inside each embed (iframe mode).
Embed height (px) 720 Fixed height of each iframe embed (200–1400).
Columns (desktop) 3 Grid columns on large screens (≥ 992px).
Columns (tablet) 2 Grid columns on medium screens (≥ 576px).
Columns (mobile) 1 Grid columns on small screens.
Grid gap (px) 16 Spacing between grid items.
Follow link text Text for a link below the grid. Requires a Profile URL; leave empty to hide.
Load module CSS Yes Load the bundled responsive-grid stylesheet. Turn off to style from your template.

Advanced

Standard Joomla module options are available too: alternative Layout, Module Class Suffix, module tag, Bootstrap size, header tag/class and module style (chrome).

8. Render modes explained

Iframe (recommended)

Each post is embedded in its own <iframe> pointing at Instagram’s /embed/ endpoint. No third-party JavaScript is loaded into your page, embeds are isolated from your site, and the height is fixed by the Embed height option.

Instagram embed.js

Posts are rendered as Instagram’s official blockquote cards, enhanced by Instagram’s embed.js script loaded from instagram.com. This produces the familiar rich card and auto-sizes to content, but it does load remote JavaScript from Meta.

9. Styling & CSS customisation

The bundled stylesheet lays posts out in a responsive CSS grid driven by CSS custom properties. The module wrapper uses the class eip; the grid, items, embeds, follow link and notice use eip-grid, eip-item, eip-embed, eip-follow and eip-notice.

To override styles from your template, target those classes, for example:

.eip-embed { border-radius: 16px; }
.eip-grid  { gap: 24px; }
.eip-follow a { font-weight: 700; }

If you prefer to control everything yourself, set Load module CSS to No and add your own rules. You can also add a Module Class Suffix to scope your CSS to a single module instance.

10. Caching behaviour

In RSS mode the fetched feed is cached per module instance under Joomla’s cache directory for the number of minutes set in Cache time. This avoids querying the bridge on every page view. If a refresh fails, the module keeps serving the last successful set of posts and, for logged-in administrators only, shows a small notice that cached content is being used. Manual mode does not fetch anything, so it is not cached.

11. Troubleshooting

Nothing appears on the page

  1. Check the module position. The most common cause. Enable Preview Module Positions in Templates → Options, then open your page with ?tp=1 appended to the URL. If the assigned position outline does not appear, the template does not output that position there – move the module to a position that is rendered.
  2. Check Menu Assignment. Make sure the module is assigned to the page you are viewing.
  3. View the page as a Super User. Configuration errors (bad feed, no URLs) are shown only to administrators, as a warning box. Visitors just see nothing, by design.
  4. Read the module log. Problems are written to administrator/logs/mod_embed_instagram_posts.php with the exact reason (HTTP code, empty body, or “Feed contained no Instagram permalinks”).

RSS mode shows nothing

  • Confirm you used the direct .xml feed URL, not the bridge’s share/preview page.
  • Open the feed URL in a browser and check the items actually link to instagram.com/p/….
  • Make sure your host allows outbound HTTP requests.
  • Clear the module cache (or wait for Cache time to expire) after fixing the URL.

An embed shows a blank/empty box

That specific post is probably deleted, private, or region-restricted. Replace it, or switch the account/post to public.

12. FAQ

Do I need an Instagram or Meta developer account?

No. The module uses Instagram’s public embed only. There is no API key or token.

Will it show a private account’s posts?

No. Only public posts can be embedded.

How do I keep posts updating automatically?

Use RSS mode with a bridge feed. New posts in the feed appear after the cache expires.

Can I put several instances on one page?

Yes. Each module instance has its own settings and its own cache.

13. License

Embed Instagram Posts is free software released under the GNU General Public License, version 2 or later (GPLv2+); the full text is in LICENSE.txt in the package. It is provided without warranty of any kind.

Instagram is a trademark of Meta Platforms, Inc. This extension is independent and is not affiliated with, endorsed by, or sponsored by Meta; it uses only Instagram’s publicly documented embed feature.

Developed and maintained by Saint Art Designs.

Related Articles

Thank you

Terms of Service

About

Saint Art Designs is a freelance Joomla web developer specializing in modern, responsive, and secure websites.

  • Joomla Web Development Service
  • Joomla Web Design
  • Joomla Upgrade
  • Joomla SEO

Why Hire Me?

With over two decades of experience in Joomla development, I deliver high-quality, stable, and scalable websites.

Each project is approached with precision, clear communication, and a focus on long-term value.

Get a Quote

Online Profiles

Freelancer
Upwork
Linkedin
Facebook
Google Review

Contact Info