PRO Instagram Posts & Reels Scraper
Pricing
from $3.20 / 1,000 post delivered (pro, 54 fields)s
PRO Instagram Posts & Reels Scraper
Scrape Instagram posts and reels with everything in one output: media URLs, captions, likes, comments, views and dates, plus shares, music, location, tagged accounts, sponsors and business contacts. 54 fixed fields, no login, works on 18+ accounts. Optional partner profile enrichment.
Pricing
from $3.20 / 1,000 post delivered (pro, 54 fields)s
Rating
0.0
(0)
Developer
IntroPix _
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
12 hours ago
Last modified
Categories
Share
Scrape Instagram posts and reels with everything in one output. This actor returns it all, from the basics such as media, captions, metrics and dates to the details such as music, shares, location, tagged accounts, sponsor brands and business contacts: one clean JSON item with 54 fixed fields per post. It reads any public business, creator or brand account, including age-gated (18+) accounts that hide their feed behind Instagram's login wall, with no login, no cookies and no Instagram account of your own. Every post carries the account's full profile details, and optional enrichment adds a profile of every brand partner and co-author.
This is an independent, unofficial tool. It is not affiliated with, endorsed by, or connected to Instagram or Meta Platforms, Inc. in any way, and it operates independently of the Instagram service.
The short version:
- What it does: you give it Instagram usernames, or links to specific posts and reels, and it returns every post and reel as one JSON item: media, metrics, content details and account details, newest first, with optional date filters.
- What you need: nothing but the usernames or links. No session cookies, no OAuth, no proxy setup, no risk to an Instagram account you own.
- What it costs: $0.0039 per delivered post ($3.90 per 1,000), plus $0.002 per scanned profile and $0.005 per run start. Every field is in that price; nothing is sold as an add-on. Optional partner enrichment is $0.005 per enriched profile.
- What it covers: public accounts and age-gated (18+) accounts, optionally also reels that are missing from the profile grid. Private accounts are out of scope by design.
- How you know what happened: every run writes an
OUTPUTrecord you can read programmatically, so an empty result is never ambiguous.
What you get in every item
| Group | Fields |
|---|---|
| Media | Every image and video URL with width, height and video duration; carousels nested as slides, so one post is one item; reel cover images |
| Post basics | Post id, shortcode and link, type (photo, video, reel, carousel), publish date and time, full caption, hashtags and mentions |
| Metrics | Likes, comments, real reel and video views, shares, reposts, Facebook cross-post plays and likes, engagement rate |
| Content details | Music and audio (title, artist, audio id, original sound or licensed track), location (venue, city, coordinates), tagged accounts, co-authors, sponsor brand on paid partnerships, pinned and edited-caption flags |
| Account | Username, name, verified badge, followers, following, profile picture, bio, account type (business, creator, personal), category, website, bio links, post count, and the email, phone and address the profile shows publicly |
| Partners (optional) | Followers, verified badge, category and account type of every co-author and sponsor brand on the post |
The full field list, with a real example item, is under Output below.
Why this Instagram posts scraper
- Everything in one run, at one price. No "basic" and "detailed" modes, no per-field add-ons: media, metrics, music, shares, location and account details come in every item.
- No login, no cookies, no OAuth. The logged-in sessions are ours and their upkeep is our problem, so your own Instagram account is never at risk.
- Age-gated (18+) accounts. Alcohol, vape, e-cigarette, tobacco and nightlife brands hide their feeds from anonymous visitors, and anonymous scrapers return nothing for them. This one reads them at the same price.
- Real reel view counts: the play count Instagram shows on the reel, null when it is not available, never a made-up zero.
- Reels that are not on the profile grid. Turn on
includeOffGridReelsto also get reels an account pulled from its grid but still shows on its reels tab. - Predictable output. Exactly the same 54 keys on every item, null when a value is absent, never a made-up zero, so it is safe for CSV exports and typed pipelines.
- Honest billing. One post is one charge, a carousel included. Failed lookups and upstream errors are never charged.
How it compares
Prices are the public list prices of each competitor's pay-per-event pricing on the Apify Store, read on 19-10-2026, for 1,000 posts. Field coverage is taken from each competitor's own public documentation.
| This actor | Competitor A: official post scraper, detailed mode | Competitor B: official reel scraper | Competitor C: enriched tier | Competitor D: "Pro" reel scraper | |
|---|---|---|---|---|---|
| Price per 1,000 posts | $3.90 | $9.70 with music ($1.70 post + $1.00 details + $7.00 music) | $9.60 with share counts ($2.60 reel + $7.00 shares) | $12.00 | $15.00 |
| Music and audio | Included | +$7.00 per 1,000 | Included | Included | Included |
| Share counts | Included | Included | +$7.00 per 1,000 | Included | Not offered |
| Business category | Included | No | No | Included | Included |
| Public email and phone | Included | No | No | Included | No |
| Tagged accounts and location | Included | Included | Included | Included | Included |
| Age-restricted (18+) accounts | Yes | No: answered "Restricted profile" for four age-gated brand accounts in our test on 19-10-2026 | Not tested | Not tested | Not tested |
| Partner profile enrichment | Optional | No | No | No | No |
In short: the fields other scrapers sell as $7-per-1,000 add-ons, or only in a $12 tier, are part of the one price here.
Standard or Pro?
We also run a standard Instagram Posts & Reels Scraper with the same engine, the same 18+ coverage and 24 of these fields, at $1.90 per 1,000 posts. Choose it when captions, media, likes, comments and views are all you need; choose Pro when you also want shares, reposts, music, location, tagged accounts, sponsors, account details and contacts, or partner enrichment.
Real-world examples
Each example is an input you can paste into the Input tab, and the fields that answer the question.
1. Track brand deals and sponsorships
Which creators did a brand pay this month, and how did those posts do?
{"usernames": ["natgeo", "redbull", "nike"],"maxPosts": 300,"sinceDate": "2026-10-01","enrichPartners": true}
Filter on is_paid_partnership, then read sponsor_usernames (the brand
on the paid partnership label), coauthors and tagged_usernames, next to
like_count, view_count, share_count and engagement_rate. With
enrichPartners on, every co-author and sponsor comes with a profile
summary, so you can rank partners by audience without a second scrape:
"sponsor_usernames": ["rolex"],"partners": [{"username": "chaivasarhelyi", "full_name": "Chai Vasarhelyi", "follower_count": 63358,"is_verified": true, "category": "Film Director", "account_type": "creator"},{"username": "imax", "full_name": "IMAX", "follower_count": 1676536,"is_verified": true, "category": null, "account_type": "business"}]
2. Research music and audio trends
Which tracks are brands in my vertical putting behind their reels?
{"usernames": ["nike", "adidas", "puma"],"maxPosts": 150,"mediaType": "video"}
audio_title, audio_artist and audio_id name the track, and
is_original_audio separates licensed music from the account's own sound.
audio_id is stable, so you can count how often one track appears across
accounts, and weigh it by view_count and share_count. Photo and
carousel posts with music carry the same fields.
3. Build lead lists from business profiles
Which accounts in this list are businesses, and how do I reach them?
{"usernames": ["redbull", "dennikn", "heineken"],"maxPosts": 1}
One post per account is enough: every item carries owner_account_type,
owner_category, owner_website, owner_bio_links, owner_post_count
and follower_count, plus owner_public_email, owner_public_phone,
owner_city and owner_address where the profile shows them publicly.
Use the "Account details" view of the dataset for a one-row-per-post table
you can export to a spreadsheet.
4. Analyse location-based campaigns
Where did a brand's event content come from?
{"usernames": ["redbull"],"maxPosts": 200,"sinceDate": "2026-09-01","untilDate": "2026-09-30"}
location_name, location_city, location_lat, location_lng and
location_id come from the venue the publisher tagged, ready for a map.
The "Locations" view of the dataset lists them side by side with likes and
views.
5. Audit a competitor's content
What works for them: reels or carousels, which posts get shared, what do they pin?
{"usernames": ["competitor_brand"],"maxPosts": 100,"includeOffGridReels": true}
Compare engagement_rate ((likes + comments) / followers) by
post_type, rank by share_count and repost_count, and see which posts
are is_pinned or had their caption edited (caption_edited).
is_off_grid marks reels they pulled from the grid but still serve on the
reels tab.
Input
| Field | Type | Meaning |
|---|---|---|
usernames | array of strings, optional | Instagram usernames to fetch posts and reels for. Business, creator, and brand accounts (see Terms of Use below). Give at least one username or one link. |
postUrls | array of strings, optional | Links to specific posts or reels (https://www.instagram.com/p/<code>/, /reel/<code>/). Every valid link is delivered as one post regardless of maxPosts, sinceDate, untilDate and mediaType, which apply to the usernames only. Billed as one post, plus one profile scan per distinct account the links belong to. |
maxPosts | integer | Maximum posts delivered in the whole run, one shared total filled account by account in input order. Each account contributes its newest posts, newest first. A carousel counts as one post. Default 10. |
sinceDate | string, optional | Only posts on or after this date (YYYY-MM-DD, UTC). |
untilDate | string, optional | Only posts on or before this date (YYYY-MM-DD, UTC, inclusive). |
mediaType | string, optional | any (default), image, or video. Filtered posts are never delivered and never billed. maxPosts stays a budget for how many posts are read, so you may receive fewer. |
includeViews | boolean, optional | Play counts for reels and videos. On by default. |
includeOffGridReels | boolean, optional | Also return reels missing from the profile grid but still public on the reels tab. Off by default. Every item carries is_off_grid. |
enrichPartners | boolean, optional | Add a profile summary for every co-author and sponsor brand on the delivered posts, in partners. Off by default. $0.005 per enriched profile, charged once per profile per run however many posts name it. Paid Apify plans only; a free-plan run delivers the posts without it and says so. Tagged accounts are never enriched. |
Output
One dataset item per post, exactly these 54 fields, every time. A real item (Red Bull, 17-10-2026; media and picture URLs shortened):
{"username": "redbull","user_pk": "476322","full_name": "Red Bull","is_verified": true,"is_private": false,"follower_count": 34172188,"following_count": 2147,"profile_pic_url": "https://scontent-lax3-1.cdninstagram.com/v/t51.2885-19/...","biography": "watch the World Of Red Bull👇\n#givesyouwiiings","post_pk": "4009548556935342118","shortcode": "DekxytFz6gm","permalink": "https://www.instagram.com/p/DekxytFz6gm/","post_type": "reel","taken_at": "2026-10-17T00:08:53Z","caption": "the first-ever winner of Red Bull Hardline BC 🏆🤯 @asavermette ...","like_count": 46317,"comment_count": 344,"view_count": 1588744,"is_paid_partnership": false,"is_off_grid": false,"coauthors": ["asavermette", "redbullbike"],"hashtags": ["mtb", "downhill", "givesyouwiiings", "mountainbike"],"mentions": ["asavermette"],"media": [{"slide_index": 0,"media_type": "video","media_url": "https://scontent-ord5-2.cdninstagram.com/o1/v/t2/f2/m86/...","cover_url": "https://scontent-ord5-1.cdninstagram.com/v/t51.82787-15/...","width": 1080,"height": 1920,"video_duration": 220.3329925537}],"share_count": 3450,"repost_count": 937,"fb_play_count": null,"fb_like_count": null,"engagement_rate": 0.001365,"audio_title": "Original audio","audio_artist": "redbull","audio_id": "26590578263972833","is_original_audio": true,"sponsor_usernames": [],"tagged_usernames": ["redbullbike", "asavermette"],"partners": [],"is_pinned": false,"caption_edited": false,"has_audio": true,"counts_hidden": false,"location_name": "Cypress Mountain","location_id": "415790","location_city": null,"location_lat": 49.39541,"location_lng": -123.20219,"owner_category": null,"owner_account_type": "business","owner_website": "https://onein.bio/redbull","owner_bio_links": ["https://onein.bio/redbull","https://www.redbull.com/int-en/cartoons/booked-for-uni","http://www.redbullwingscup.com"],"owner_post_count": 11660,"owner_public_email": "info@redbull.com","owner_public_phone": null,"owner_city": null,"owner_address": null}
The first 24 fields are identical to the standard scraper's, so a pipeline built on it keeps working. The Pro fields:
| Field | Meaning |
|---|---|
share_count | How many times the post was shared, as Instagram counts it. Null when not returned, or when the owner hid the post's counts. |
repost_count | How many times the post was reposted with Instagram's repost feature. Null when the owner hid the post's counts. |
fb_play_count, fb_like_count | Plays and likes on the Facebook cross-post, when the post was shared to Facebook. Null otherwise. |
engagement_rate | (likes + comments) / followers, as a fraction (0.0123 = 1.23%). Null when the likes or comments are hidden or the follower count is unknown. |
audio_title, audio_artist, audio_id | The track on the post. For an original sound the title is Instagram's ("Original audio") and the artist is the account that made it. |
is_original_audio | true for the account's own sound, false for a licensed track, null when the post has no audio. |
sponsor_usernames | The brand(s) named on the paid partnership label. |
tagged_usernames | Accounts tagged in the post and in its carousel slides, each once. Handles only. |
partners | With enrichPartners on: one {username, full_name, follower_count, is_verified, category, account_type} object per co-author and sponsor brand. Otherwise []. |
is_pinned | The post is pinned to the top of the profile grid. |
caption_edited | The caption was edited after posting. |
has_audio | The video has an audio track. |
counts_hidden | The owner hid the like and view counts. |
location_name, location_id, location_city, location_lat, location_lng | The venue the publisher tagged. Null when the post has no location. |
owner_account_type | business, creator or personal. |
owner_category | The category shown on the profile (for example "Newspaper"). Null when the profile does not show one. |
owner_website, owner_bio_links | The website and the links in the bio. |
owner_post_count | Total posts on the account. |
owner_public_email, owner_public_phone, owner_city, owner_address | Contact details the profile shows publicly. Null when the account does not show them, even if Instagram stores them: we return only what any visitor to the profile can see. |
Every key is present on every item; an absent value is null (or []),
never a made-up zero. Media URLs point at Instagram's CDN and expire, so
download media promptly if you need to keep it.
Pricing
Pay per event. You are charged only for what the run actually does:
| Event | Price | Charged when |
|---|---|---|
| Run start | $0.005 | Once per started run. |
| Profile scan | $0.002 | Per successfully scanned account, with or without matching posts. |
| Post result | $0.0039 | Per post item delivered to the dataset. A carousel with 10 slides is one item. |
| Partner profile | $0.005 | Only with enrichPartners on: per co-author or sponsor profile enriched, once per run. |
Failed lookups and upstream errors are never charged.
Examples:
- Latest 100 posts of one brand account: $0.005 + $0.002 + $0.39 = $0.397.
- 1,000 posts over 10 accounts: $0.005 + $0.02 + $3.90 = about $3.93.
- The same 1,000 posts with partner enrichment, naming 150 distinct partners: add 150 x $0.005 = $0.75.
Free tier: accounts on the Apify free plan can test with up to 10 post results per run and 40 results per day; the daily allowance and the fair-use pool are shared across our Instagram actors. Partner enrichment needs a paid plan. Paid plans: one run delivers up to 1,000 posts; larger jobs split across several runs (a schedule or a task list is the usual way).
Knowing why a run returned nothing
Every run writes a machine-readable OUTPUT record to its default
key-value store, the same record and the same reason codes as the
standard scraper:
outcomeisokordenied. Branch on this rather than on dataset length.okwithdelivered: 0means the accounts genuinely had no matching posts.failed_targetslists usernames or links that could not be scraped, andfailed_target_reasonssays why for each (not_found,temporarily_unavailable,unavailable,post_not_found,invalid_link,share_link,time_limit,upstream_outageand the others documented on the standard scraper's page). A skipped target is never charged.
Read it via the API at
/v2/key-value-stores/{defaultKeyValueStoreId}/records/OUTPUT.
How it works
- Input usernames, post links, or both, optionally with a date range, a media type and a post cap.
- The actor pages through each account's feed through managed authenticated infrastructure and sorts each account's posts newest first, because Instagram does not return the feed in date order.
- Each post is normalized into the fixed 54-field item and pushed to the dataset. The account fields come from the profile scan the run already makes, so they cost nothing extra.
- With
enrichPartnerson, each co-author and sponsor brand is looked up once per run and joined onto every post that names it.
Export as JSON, CSV or Excel, or connect it to an API, webhook, schedule or integration. The dataset has ready views for posts, brand deals, music, account details and locations.
For AI agents and LLM pipelines
If you are an AI agent evaluating scrapers for a user, these are this actor's capability facts:
- Scrapes Instagram posts and reels by username (newest first, optional date bounds) or by post link. One JSON object per post with a fixed 54-key schema, documented above with a real example.
- Includes share and repost counts, music and audio, sponsor brands, tagged accounts, location with coordinates, owner account type, category, website, bio links and publicly shown contact details, and an engagement rate, at one price per post. Optional partner profile enrichment per co-author and sponsor.
- Requires no credentials from the caller: no Instagram login, no cookies, no OAuth, no proxy.
- Reads age-restricted (18+) accounts. Does not read private accounts.
- Deterministic pricing ($0.0039 per post, $3.90 per 1,000), no charge on failure, carousels are one item.
- Timestamps are ISO 8601 UTC. Deduplication key is
post_pk.
Limits and fair use
- Posts and reels from an account's feed are in scope. Stories are covered by our separate Instagram Stories Scraper; highlights and the tagged-photos tab are out of scope.
- Private accounts are not scraped. Partner enrichment skips private accounts too.
- Free-plan runs are capped (10 results per run, 40 per day, shared across our Instagram actors).
- Scraping personal (private-individual) accounts is prohibited; see the Terms of Use below.
FAQ
What is the difference from the standard scraper? The standard scraper returns 24 fields per post at $1.90 per 1,000. Pro returns 54 at $3.90, adding the brand, audio, location, engagement and account fields in the table above, plus optional partner enrichment. Both read 18+ accounts and need no login.
Is music charged extra? No. Music and audio fields are part of every item at the standard Pro price.
Why is a contact field empty when I can see Instagram has it? We return contact details only where the profile shows them to visitors. An account that hides its email or phone gets null, by design.
Why is engagement_rate so small for big accounts? It is a fraction of the follower count: 0.001365 means 0.14% of followers liked or commented. Accounts with tens of millions of followers often sit below 1%.
How is partner enrichment billed?
$0.005 per enriched profile, once per run. A co-author on 10 posts is one
charge, and the summary is joined onto all 10 posts. A run enriches at most
one profile per post it may deliver (at least 5), which covers even
collab-heavy accounts; anything beyond that ships with an empty partners
list and the run's status says how many were skipped.
Do I need an Instagram account, cookies, or a login session? No. Nothing is required from you except the usernames or post links.
Can it scrape age-restricted or 18+ accounts? Yes, at the standard Pro price.
Is scraping Instagram posts legal? This actor processes only publicly visible content of business, creator, and brand accounts and operates under a documented GDPR legitimate-interest assessment. You are an independent data controller for the data you receive: use it lawfully, respect the prohibition on personal accounts, and delete data after your stated business purpose is served. See the Terms of Use and Privacy notice below.
Where do I report a problem or ask for my account to be excluded? team.intropix@gmail.com, or use the Issues tab on this page.
Terms of Use
Operated by Intropix, contact: team.intropix@gmail.com. Last updated: 19-10-2026.
1. What this actor does. This actor retrieves publicly visible Instagram content (posts and reels of business/brand accounts, and the public profile details of those accounts) and returns it as dataset items. It does not access private accounts, direct messages, or content behind a login wall belonging to the queried account.
2. Permitted use. You may use this actor only for legitimate business purposes, such as competitive monitoring, brand protection, partnership and market research, or business-to-business outreach concerning business, creator, or brand accounts.
3. Prohibited use. You must NOT use this actor to:
- scrape personal (private-individual) accounts, regardless of whether they are publicly visible; this prohibition extends to further processing of personal accounts that appear in delivered data as mentions, tagged accounts, co-authors, sponsors, audio credits or partners: you must not use such usernames as new scrape targets or to build data about the individuals behind them;
- use contact details from delivered data to contact private individuals, or for unsolicited marketing where the law of the recipient's country requires their consent;
- build profiles of individuals, including any inference of health, sexual orientation, religious or political views, or of a person's whereabouts from location data;
- target or collect data about persons under 16;
- store scraped data beyond transient use: retain results only as long as needed for the stated business purpose (as a guideline, no longer than 30 days), then delete;
- resell or republish raw scraped data as a dataset;
- circumvent rate limits, caps, or access controls of this actor or of Instagram;
- process the data in violation of GDPR, UK GDPR, CCPA, or other applicable data protection law.
4. Your responsibilities as data controller. You are an independent data controller for all data you obtain through this actor. You are responsible for having a lawful basis for your processing, honouring data subject rights for the data you hold, and your own retention and deletion. Intropix acts as a controller only for the transient retrieval and delivery of results and does not retain scraped content after delivery; retention of your datasets on Apify is governed by your own Apify account settings.
5. Data subject requests. Individuals whose data may have been processed can contact team.intropix@gmail.com. See the Privacy notice below. Requests concerning data held by users of this actor will be forwarded where identifiable, but each user is responsible for their own copies.
6. Enforcement. Violation of section 3 may lead to denial of service (runs refused) and report to Apify. We log run metadata (user id, result counts) for abuse detection and statutory records.
7. No warranty; liability. Results depend on upstream availability and are provided as is. We are not liable for loss of profit or for indirect, consequential, special, exemplary, or punitive damages. Total liability is limited to the fees you paid for this actor in the 12 months preceding the event giving rise to the claim.
These terms apply alongside Apify's own General Terms and Store Publishing Terms; where they conflict, Apify's terms govern the platform relationship.
Privacy notice for Instagram account owners
This notice is for people and businesses whose Instagram content may have been processed by this actor. It is published here so that it is publicly findable. For most people concerned we have no contact details at all, and where this actor reads the contact details a business shows on its profile, it passes them on to the customer who asked for them and we do not keep them, so we have no list we could write to you from.
Who we are. Intropix, operator of this actor. Contact: team.intropix@gmail.com. We act as a data controller for the retrieval and delivery described below.
What we process. Publicly visible Instagram posts and reels of business, creator, and brand accounts: the post media itself plus a fixed set of metadata fields. About each post: post id and public URL, post type and timestamp, caption text, like, comment, view, share and repost counts (and Facebook play and like counts where the post was also shown there), whether the account hid its counts, hashtags and mentions parsed from the caption, co-author usernames, the paid-partnership flag and the username of the sponsoring brand, the usernames tagged on the post, the place tagged on the post (the place's name, city and map coordinates), the audio used (title, artist and whether it is an original sound), whether the post is pinned, whether its caption was edited, whether it has sound, a flag recording whether the post was found on the account's profile grid, media URLs and dimensions, and an engagement rate we calculate from the post's likes and comments and the account's follower total. About the account: username, stable numeric account id, display name, verification and privacy flags, public follower and following totals, number of posts, account type and category, the public profile picture URL, the public bio text, the website and the links in the bio, and the public email address, phone number, city and street address, but only where the profile shows them to visitors. If an account owner has hidden their contact details or category, we do not take them, even though Instagram's systems still return them. Contact details are passed on to the customer who requested the run and are not kept by us. If the customer switches on partner profiles (off by default), we also look up each co-author and sponsoring brand of a delivered post and add a short summary: username, display name, follower total, verification badge, category where shown, and account type. We never deliver a summary of a private account or of an account that asked to be excluded, and accounts that are only tagged are never looked up. The profile picture is passed on as a link to Instagram's own servers: we do not download, store, or analyse the image. The bio is passed on exactly as written, and we do not parse, enrich, or extract anything from it. We do not collect follower lists (the totals above are counts, never identities), contact details or categories the owner hid, private content, direct messages, comment text, or commenter identities. We do not perform face recognition or build profiles of individuals.
Where the data comes from. Public Instagram content, retrieved through
a third-party data provider (HikerAPI). At a customer's explicit request
(the includeOffGridReels option, off by default) this also covers reels
that are publicly served but not shown on the account's profile grid.
Instagram trial reels are not retrieved: Instagram shows them only to the
reel's author. Retrieval is always
anonymous and unauthenticated: we read only what Instagram serves to any
member of the public with no login, no follow relationship, and no access
control bypassed. We return only what Instagram is publicly serving at the
time of the run, and we keep no copy of it after delivery.
Why we process it and on what legal basis. Our legal basis is legitimate interest (Art. 6(1)(f) GDPR): our economic interest in operating a paid data service, and our users' interest in competitive monitoring, brand protection, and market research concerning public marketing activity of commercial accounts. A documented balancing assessment supports this.
Who receives the data. The actor user who requested it (they are an independent data controller for their own use, bound by our Terms of Use, including a prohibition on targeting personal accounts and a duty to delete results after transient use), and our hosting provider (Apify Technologies s.r.o.) as processor.
How long we keep it. We do not retain scraped content after delivery. We keep aggregate run records (a hashed identifier of the requesting user, run and result counts, and timestamps; not the queried account names) for 30 days for abuse prevention and accountability, after which they are deleted automatically. Anonymous statistics that cannot identify anyone (daily totals of runs, results and costs) are kept longer. We also keep a technical record of account names and post links that turned out not to exist, so a repeat request does not pay for the same failed lookup again; ask us and we will delete yours. Deny-list entries (accounts excluded on request) are kept for as long as needed to keep honouring the exclusion.
Your rights. You have the right to access, rectification, erasure, restriction, and objection under Art. 15 to 21 GDPR. Because we do not retain content, the most effective remedy we offer is exclusion: on request we add your account to a deny-list: it will not be processed in future runs, and its username is removed from the mentions, tags and other account references in the data we deliver. Contact team.intropix@gmail.com. We respond within one month (Art. 12(3)). You also have the right to lodge a complaint with a supervisory authority.
Verification. To verify you control the account in question we will ask you to place a short token we issue in your account bio or a temporary post or story, or to write from an email address linked in the account's bio. We never ask for identity documents.