Instagram Engaged Audience Exporter avatar

Instagram Engaged Audience Exporter

Pricing

from $0.60 / 1,000 unique audience users

Go to Apify Store
Instagram Engaged Audience Exporter

Instagram Engaged Audience Exporter

Combine public Instagram likers and commenters from multiple posts and Reels into one deduplicated audience dataset with source-post provenance and optional public profile enrichment.

Pricing

from $0.60 / 1,000 unique audience users

Rating

0.0

(0)

Developer

Data Slayer

Data Slayer

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

5 hours ago

Last modified

Share

Turn the public likes and comments across multiple Instagram posts and Reels into one deduplicated audience table, with every user linked back to the interactions and source posts where they were observed.

Watch the demo

YouTube video coming soon.

What this Actor does

Most engagement exports make you choose between likers and commenters, then leave you to merge repeated users yourself. This Actor checks both engagement sources for every accepted post, combines the observed users, removes duplicates across posts, and preserves provenance.

Each dataset row represents one unique public Instagram user. The row can show:

  • Whether the user liked, commented, or appeared in an embedded comment reply preview
  • Every processed source post where that engagement was observed
  • Comment IDs, parent-comment references, text, timestamps, and like counts when publicly available
  • Public username, display name, profile URL, profile picture, privacy state, and verification state
  • Optional public profile enrichment such as biography, follower count, following count, post count, category, and website
  • An explicit enrichment status so missing or unrequested profile details are never ambiguous

The run summary reports how many engagement records were examined, how many unique users were found and saved, how many duplicates were collapsed, which limits were reached, and where coverage was partial.

Use cases

  • Campaign audience export: combine the people who reacted to several campaign posts into one reusable audience table.
  • Competitor audience research: identify recurring public engagers across a competitor's selected posts.
  • Creator and community research: separate commenter-level intent from liker-only engagement while retaining both signals.
  • Cross-post overlap analysis: see which users engaged with more than one source post.
  • Audience qualification: optionally add current public profile context to a bounded subset of users.
  • Voice-of-customer research: retain comment text and comment references alongside the author record.

Quick start

  1. Add one or more public Instagram post, Reel, or TV URLs.
  2. Choose per-post and whole-run audience limits.
  3. Optionally enable public profile enrichment and set its separate lookup limit.
  4. Start the Actor.
  5. Open the dataset for one row per unique audience user, and open OUTPUT for the coverage summary.

Both likes and comments are checked automatically. There is no likes-versus-comments mode to manage.

Input

FieldTypeRequiredDefaultAccepted rangeDescription
postUrlsarray of stringsYes—1–10 URLsPublic Instagram /p/, /reel/, or /tv/ URLs. Duplicate canonical URLs are removed before collection.
maxUsersPerPostintegerNo2501–1,000Maximum unique users attributed to each post after combining likes and comments.
maxUniqueUsersintegerNo10001–5,000Maximum unique users saved across all posts after cross-post deduplication.
includeProfileDetailsbooleanNofalse—Add current public profile context to a capped subset of the audience.
maxProfileLookupsintegerNo1001–500Maximum unique users to enrich when profile details are enabled.

Example:

{
"postUrls": [
"https://www.instagram.com/reel/DdRf9lktEb1/",
"https://www.instagram.com/p/EXAMPLE123/"
],
"maxUsersPerPost": 500,
"maxUniqueUsers": 1000,
"includeProfileDetails": true,
"maxProfileLookups": 100
}

The example URL containing EXAMPLE123 is illustrative and should be replaced with a real public post URL.

Free-plan test limits

Free-plan runs are intended for evaluation and are limited to the first accepted post URL, 100 unique audience users, and five profile enrichments. The Actor exits gracefully with a clear summary when a Free-plan limit is reached. Paid plans can use the full input ceilings above.

Output

The default dataset contains one row per unique audience user. One saved row is the primary billable audience-user unit; repeated observations for the same userKey are merged into that row.

Dataset row fields

KeyTypeNullableMeaning
userKeystringNoRow identity: id:<public user ID> when available, otherwise username:<normalized username>.
userIdstringYesPublic user ID, kept as a string to avoid precision loss.
usernamestringYesPublic username observed at collection time.
fullNamestringYesPublic display name.
profileUrlstring (URL)YesCanonical public profile URL.
profilePictureUrlstring (URL)YesPublic profile-image URL; it can expire.
isPrivatebooleanYesPublicly reported privacy state.
isVerifiedbooleanYesPublicly reported verification state.
engagementTypesarray of stringsNoUnique values from like, comment, and reply_preview.
sourcePostCountintegerNoNumber of retained source posts for this user.
engagementObservationCountintegerNoRetained like, comment, and reply-preview observations before they are merged into one user row.
likedPostCountintegerNoSource posts where a like was observed.
commentedPostCountintegerNoSource posts with at least one observed top-level comment by the user.
replyPreviewPostCountintegerNoSource posts with at least one embedded reply preview by the user.
sourcePostsarray of objectsNoPer-post provenance described below.
enrichmentStatusstringNonot_requested, enriched, limit_reached, unavailable, or failed.
profileobjectYesOptional public profile enrichment; null unless enrichment succeeds.
collectedAtstring (date-time)NoUTC ISO 8601 collection time.

Each sourcePosts item contains postUrl (URL), postType (post, reel, or tv), shortCode (string), engagementTypes (array), liked (boolean), and comments (array). Each comment contains commentId (string), parentCommentId (string or null), isReplyPreview (boolean), text (string or null), createdAt (UTC date-time or null), likeCount (non-negative integer or null), hashtags (string array), and mentions (string array).

When enrichment succeeds, profile contains biography (string or null), followerCount, followingCount, and postCount (non-negative integers or null), category (string or null), and externalUrl (URL or null).

Illustrative JSON row:

{
"userKey": "id:1234567890",
"userId": "1234567890",
"username": "example_user",
"fullName": "Example User",
"profileUrl": "https://www.instagram.com/example_user/",
"profilePictureUrl": "https://example.com/profile.jpg",
"isPrivate": false,
"isVerified": false,
"engagementTypes": ["like", "comment"],
"sourcePostCount": 1,
"engagementObservationCount": 2,
"likedPostCount": 1,
"commentedPostCount": 1,
"replyPreviewPostCount": 0,
"sourcePosts": [
{
"postUrl": "https://www.instagram.com/reel/EXAMPLE123/",
"postType": "reel",
"shortCode": "EXAMPLE123",
"engagementTypes": ["like", "comment"],
"liked": true,
"comments": [
{
"commentId": "9876543210",
"parentCommentId": null,
"isReplyPreview": false,
"text": "Illustrative public comment text",
"createdAt": "2026-09-20T08:30:00Z",
"likeCount": 2,
"hashtags": [],
"mentions": []
}
]
}
],
"enrichmentStatus": "enriched",
"profile": {
"biography": "Illustrative public biography",
"followerCount": 12000,
"followingCount": 430,
"postCount": 215,
"category": "Digital creator",
"externalUrl": "https://example.com"
},
"collectedAt": "2026-09-20T09:00:00Z"
}

This example is illustrative, not an observed customer record. Optional values can be null when they are not publicly available. JSON is the canonical nested output. In CSV exports, arrays and objects are serialized as JSON text so provenance is retained.

Enrichment statuses

  • not_requested — profile enrichment was disabled.
  • enriched — current public profile details were attached successfully.
  • limit_reached — the audience user was outside the configured enrichment budget.
  • unavailable — the profile was private, removed, restricted, or otherwise unavailable.
  • failed — the profile lookup failed after the bounded attempt; the base audience row remains available.

Coverage summary

The OUTPUT key-value-store record contains status; input, accepted, duplicate, processed, partial, and failed post counts; likes, top-level comments, reply previews, and total observations examined; unique users found and saved; duplicates collapsed; profile outcome counts; limitsReached; per-post summaries in posts; and stable customer-facing problems in errors.

Run status is one of succeeded, empty, partial, failed, charge_limit_reached, or free_plan_limit_reached. Each post reports its URL, type, shortcode, status, examined counts, unique-user counts, duplicates, and a stopReason such as natural_end, per_post_limit, global_limit, free_plan_limit, maximum_charge, content_unavailable, data_temporarily_unavailable, or invalid_data.

Each public error has code, scope, optional postUrl, optional userKey, a functional message, and retryable. Errors describe the actionable outcome and whether retrying may help.

The summary distinguishes a natural end from a cap, an unavailable post, a partial result, or a service failure. Status information is not mixed into the audience dataset and is not billed as an audience result.

Deduplication and provenance

  • Stable public user ID is the primary deduplication key.
  • Normalized username is used only as a documented fallback when no user ID is present.
  • Duplicate users are merged into one row rather than discarded.
  • Every retained observation keeps its source post.
  • Comment records keep their comment ID and parent-comment reference when available.
  • Dataset ordering is deterministic: first observed input post, then higher-intent comment or reply-preview users before liker-only users from the same post.
  • Per-post and global caps apply after deduplication; available public users can be lower than requested.

Coverage and limitations

  • Only publicly accessible engagement information can be processed.
  • A displayed Instagram like or comment total does not guarantee that every underlying user or comment is publicly exposed.
  • Likes are collected from the bounded public results available for each post. The Actor does not promise additional liker pages beyond those available results.
  • Additional top-level comments are collected only while more public results are available and the configured budgets allow useful records.
  • Embedded reply previews can contribute audience users. The initial version does not open every comment thread, so reply coverage is partial.
  • Private, deleted, age-restricted, region-restricted, or otherwise unavailable posts can return partial or no data.
  • Ordering and public availability can change between runs.
  • Profile enrichment is best-effort and does not turn unavailable private profile fields into public data.

Pricing

The pricing model is pay per event. Platform usage during the run is included in the event prices; normal Apify charges can still apply when datasets or other storage are accessed after the run.

EventWhen chargedFreeBronzeSilverGoldPlatinumDiamond
Actor startOnce when a run starts at the configured 256 MB$0.002$0.002$0.002$0.002$0.002$0.002
Source post processedOnce per accepted post when it is successfully checked for at least one engagement type, including an empty, partial, or complete result$0.0045$0.0040$0.0035$0.0030$0.0030$0.0030
Unique audience userOnce per unique user row saved to the default dataset$0.80 / 1,000$0.70 / 1,000$0.65 / 1,000$0.60 / 1,000$0.60 / 1,000$0.60 / 1,000
Profile enrichmentOnce per public profile successfully attached$2.00 / 1,000$1.80 / 1,000$1.65 / 1,000$1.50 / 1,000$1.50 / 1,000$1.50 / 1,000

Invalid input is rejected before collection. A source-post event is not charged when the post cannot be checked successfully for either engagement type. Failed or unavailable profile lookups are not billed as profile enrichments. Empty status rows are never added to the dataset or billed as audience users.

You can set a maximum run charge in Apify. The Actor is designed to stop gracefully before producing chargeable events beyond that limit and to preserve already saved rows and the run summary.

Example estimate

A Bronze run with one processed post, 250 unique audience users, and no profile enrichment would cost:

$0.002 actor start
+ $0.004 source post
+ 250 × $0.0007 unique audience user
= $0.1810

Actual cost depends on the number of accepted posts, unique saved users, successful profile enrichments, the user's Apify pricing tier, and the maximum-charge limit.

Empty, partial, and failed runs

  • Invalid input stops before any collection event.
  • If one post fails, completed rows from other posts remain available.
  • If one engagement type is unavailable but the other is collected successfully, the post is marked partial and its usable users are retained.
  • If neither engagement type can be collected successfully, the post is marked failed and is not charged as processed.
  • Profile failures never remove the underlying audience user.
  • Every stop reason is written in neutral customer-facing language without exposing internal routing or credentials.

API example

curl -X POST \
"https://api.apify.com/v2/acts/data-slayer~instagram-engaged-audience-exporter/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"postUrls": ["https://www.instagram.com/reel/DdRf9lktEb1/"],
"maxUsersPerPost": 250,
"maxUniqueUsers": 1000,
"includeProfileDetails": false,
"maxProfileLookups": 100
}'

After the run, download the default dataset as JSON, CSV, Excel, XML, or another format supported by Apify, or connect it to schedules, webhooks, Make, Zapier, Google Sheets, or your own API workflow.

Responsible use

Use public data responsibly and follow applicable laws, platform terms, and your organization's policies. Do not use exported audience data for spam, harassment, discrimination, deception, or other harmful activity. Review whether you have an appropriate purpose and legal basis before contacting or profiling people.

FAQ

Does this Actor collect both likers and commenters?

Yes. Both sources are checked for every accepted post. You do not need two separate runs or a source-mode selector.

Does it return every person shown in Instagram's engagement totals?

No. Instagram can expose fewer public records than the displayed total. The coverage summary reports what was examined and whether the result was capped or partial.

Does it collect every comment reply?

No. The initial version includes reply authors already present in embedded reply previews but does not open every comment thread. Reply coverage is explicitly partial.

What happens when the same user engages with several posts?

The user appears once. Their row keeps all observed engagement types and source-post references, so overlap is preserved as information rather than returned as duplicate rows.

Can I enrich every user profile?

You can request enrichment up to the plan and input limits. Successful public profiles are billed separately; unavailable and failed lookups are not billed as enrichments.

Does the Actor expose private profile information?

No. It returns only information publicly available at collection time. Private or restricted fields are not bypassed or guessed.

Do I need an Instagram login or cookies?

No Instagram account, password, cookie, or session token is requested in the Actor input.

Is this an official Instagram tool?

No. This is an independent Actor and is not affiliated with, endorsed by, or sponsored by Instagram or Meta.

When should I use a separate likes or comments Actor?

Use this Actor when you want one deduplicated cross-post audience with combined provenance. A likes-only or comments-only Actor can be more suitable when you need a single-source export rather than an audience join.

Start with one post

Use one representative public post first, inspect the coverage summary, and then increase post, audience, or enrichment limits for the full workflow.

More Instagram actors from the same portfolio. Apify only auto-recommends actors in the same category, so here are the rest of ours:

Actor
Instagram Audio & Trending Sounds Scraper · No Login
Instagram Brand Mentions & UGC Monitor
Instagram Comments Scraper with Replies · No Login
Instagram Creator Lead Finder · Keywords & Hashtags
Instagram Follower Count & Growth Monitor
Instagram Followers & Following Search
Instagram Followers Scraper & Enricher · No Login
Instagram Following Scraper & Enricher · No Login
Instagram Hashtag Finder · No Login
Instagram Hashtag Posts & Reels Scraper · No Login
Instagram Hashtag Research Reports
Instagram Highlights Scraper · No Login
Instagram Keyword Posts Scraper
Instagram Likes Scraper · No Cookies
Instagram Location Posts Scraper · No Login
Instagram Media Archive Downloader
Instagram Place Finder & Details
Instagram Post & Reel Details Scraper · No Login
Instagram Profile Posts & Reels Scraper · No Login
Instagram Profile Reels Scraper · No Login
Instagram Profile Scraper · Account Age & Verified Emails
Instagram Public Contact Finder
Instagram Reel Performance Tracker
Instagram Reel Transcript Scraper
Instagram Reels Search & Trend Discovery · No Login
Instagram Reels by Audio ID · Sound & Music Tracker · No Login
Instagram Related Creator Network
Instagram Reposts Scraper · Profile Repost History · No Login
Instagram Similar Accounts Scraper · No Login
Instagram Similar Accounts Scraper · No Login
Instagram Stories Scraper · No Login
Instagram Tagged Posts & Mentions Scraper · No Login
Instagram Trending Audio & Sounds Search · No Login
Instagram User Search · Find Leads by Keyword · No Login