Privacy Policy

Saved Posts Library & Export (Chrome extension)

Last updated: 25 August 2026 · Applies to version 4.4.3 and later

Independent third-party extension. Not affiliated with, authorized by, endorsed by, or sponsored by Instagram or Meta. "Instagram" is a trademark of Meta Platforms, Inc., used here only to describe factually where the extension works.

Summary

Capturing a link is not the same as saving a file. Capture records a media URL. Instagram's media URLs expire, and a deleted post stops resolving. Your captured library is therefore not, by itself, a permanent offline copy of the media — only media you explicitly download becomes a file on your computer that keeps working.

What the extension processes

When capture is running, the extension reads the saved-post data that Instagram has already sent to your browser for the page you are looking at, and stores the following locally:

CategoryExampleWhy it is stored
Media URLsthe CDN address of an image or video fileTo display and download the media
Post URLs and shortcodes/p/ABC123/To group media by post and let you reopen the original
Usernames / post owners@exampleTo group and search your library by author
Captionsthe post's caption textSearch, and inclusion in exports
Timestampswhen the post was publishedSorting your library by date
Like countsa numberShown in the item details panel
Hashtags#exampleDerived from the caption; used for search
Carousel metadataslide index, album sizeTo reassemble multi-image albums
Capture timestampswhen you captured the itemPowers the "new since last visit" badge
Consent timestampsbeConsentAcceptedAtRecords that you accepted the first-run disclosure, so capture cannot start without it
Last-seen timestampigExporterLastSeenAtDrives the “new since you last looked” toolbar badge
Maintenance markerssbeLegacyCleanupAt, sbeLibrarySanitizedAtTimestamps recording when leftover analytics identifiers were deleted, and when the library was last rebuilt by the safety pass. Neither contains post data.

All of the above is content that is already visible to you, as the signed-in user, on the pages you visit. The extension does not access content that you are not authorized to view. It gains you no access you did not already have, and it does not bypass any login, paywall or restriction.

To be precise rather than reassuring: if you follow a private account and have saved a post from it, that post is visible to you, and the extension can therefore process it — because you are already authorized to see it. Earlier versions of this policy said the extension "does not access other users' private posts", which was misleading. What is true is the narrower statement above.

The content itself belongs to whoever posted it. Keeping a copy for your own reference is not the same as owning it, and anything you do with it beyond that is your responsibility.

What the extension never touches

Two things worth stating precisely rather than sweepingly

Clipboard. The extension never reads your clipboard. It writes to it in exactly one situation: when you press Copy URLs, it puts the selected allowlisted media links on the clipboard. That is the entire point of the button, it happens only on that click, and nothing is written at any other time. An earlier version of this policy asserted no clipboard involvement at all, which was wrong.

Downloads. The extension does not request the downloads permission (downloads) and cannot read your Chrome download history. It does, of course, create downloads — that is what the Download and ZIP buttons do — using an ordinary link the browser saves. An earlier version of this policy implied no download involvement at all, which would have been misleading.

Capture happens only when you start it

Opening Instagram does not start a capture. The component that reads page responses installs itself only after you press Start capture in the extension popup, and removes itself when you press Stop capture, when a capture finishes, or whenever the page is reloaded or closed. Capture state is never persisted, so every new page load begins with capture switched off.

Before the very first capture the extension shows a disclosure describing exactly what will be read and stored, and will not proceed until you accept it.

Where your data is stored, and for how long

Captured data is written to chrome.storage.local, which lives in your Chrome profile on your own device. It is not synced to other devices by the extension and it is not sent anywhere. It is retained until one of the following happens:

Two small housekeeping values are also stored: sbeLegacyCleanupAt, recording when leftover analytics identifiers from older versions were deleted, and sbeLibrarySanitizedAt, recording when the library was last rebuilt by the 4.4.2 safety pass. Both are timestamps and neither contains post data.

There is no server-side copy, so there is nothing to request deletion of and no account to close.

Permissions and why each one is needed

PermissionPurpose
storage Save your captured library and preferences locally via chrome.storage.local. This is the extension's only data store.
unlimitedStorage Lift Chrome's default ~10 MB quota for local extension storage. A large saved collection with captions can exceed it, and without this the capture would fail partway and lose data. It grants no access to any data — it only raises a size limit.
Host access to https://www.instagram.com/* and https://instagram.com/* Run the capture scripts on the saved-posts pages, and let the popup tell whether the current tab is an Instagram tab so it can show the right screen. This is the only site the extension can reach.

Those are three separate things — two API permissions and one host access grant. Describing them as "two permissions", as an earlier version of this policy did, undercounted.

The Instagram/Meta CDN hosts are deliberately not requested as permissions. When the library shows a preview or downloads a file, the browser makes an ordinary cross-origin request that works only because the CDN allows it. The extension holds no special access to those hosts; the Content Security Policy simply bounds which addresses it may contact at all.

The extension does not request cookies, webRequest, history, identity, debugger, management, nativeMessaging, tabs, scripting, activeTab, downloads, or <all_urls>.

Network connections

Being specific here matters more than sounding reassuring. There are two tiers, and the difference is the part earlier versions of this policy got wrong:

Automatic: opening the library, or opening a preview or fullscreen view, causes your browser to request the corresponding thumbnail or media file from Instagram/Meta CDN hosts. No click on Download is involved — displaying a stored image URL means fetching it.
Explicit: Download and ZIP actions fetch media so it can be saved to your computer, and happen only when you press those buttons.

The full list of requests the extension causes:

What does not happen: there is no developer-operated server, no telemetry endpoint, no advertising network, and no remotely loaded code. Your captured library — the URLs, usernames, captions and everything else — is never sent anywhere. All extension code is contained in the package you install, as required by Manifest V3, and the extension's own pages run under a Content Security Policy that permits connections only to the two CDN hosts named above.

No analytics

This extension contains no analytics, no measurement SDK, no pixel, no fingerprinting, and no behavioural profiling. No persistent identifier is generated for you.

Security fix in 4.4.2 — older stored records

An independent review of version 4.4.1 found that records saved by version 4.4.0 or earlier were loaded from local storage without being validated. Validation had been added for newly captured and newly imported data, but not for data that was already there. A crafted record already present in storage could therefore reach the library's display and download paths.

Version 4.4.2 fixes this. The library is now rebuilt field by field whenever it is loaded — from storage, from a storage change, or from an import — every URL is re-checked at the moment it is displayed, fetched, opened, copied or exported, and the cleaned library is written back so unsafe values are removed from your browser permanently rather than merely hidden. If anything is removed, the library tells you how many records or fields were affected.

No data was transmitted anywhere as a result of this defect. It was a local rendering-safety problem, not a leak. It is described here because you are entitled to know what changed in your browser and why.

Change history — analytics removal

Being accurate about this matters more than looking clean: versions up to and including 4.4.0 shipped a file (analytics.js) that sent usage events — page views, button clicks, feature usage, and error names — together with a randomly generated persistent client identifier to Google Analytics 4 via its Measurement Protocol. Those earlier versions' privacy policy stated that no analytics was used, which was incorrect.

As of version 4.4.1: the analytics file, its measurement ID and API secret, all of its call sites, and the google-analytics.com host permission have all been removed. No Instagram content, media URL, caption, or username was ever included in those events, but the events themselves should not have been sent at all. Version 4.4.1 also deletes the leftover ga_client_id, ga_debug, and ga_session_id values from your browser the first time you open the popup or gallery.

Chrome Web Store User Data Policy

The extension complies with the Chrome Web Store User Data Policy, including the Limited Use requirements:

Terms of the sites you use

You are responsible for your own use of Instagram, including its Terms of Use. This extension is a tool for saving content you can already see in your own account; it does not bypass authentication, access controls, paywalls, or content restrictions of any kind.

Children

The extension is not directed at children and collects no data from anyone, of any age, on any server.

Changes to this policy

If the extension's data handling changes, this policy will be updated in the same release and the "Last updated" date above will change. Material changes will be described in the store listing's release notes.

Contact

Questions about this policy can be raised as an issue on the project's repository, or sent to the developer contact address listed on the Chrome Web Store listing page.