Instagram Account Analytics Scraper avatar

Instagram Account Analytics Scraper

Under maintenance

Pricing

from $1.01 / 1,000 item extracteds

Go to Apify Store
Instagram Account Analytics Scraper

Instagram Account Analytics Scraper

Under maintenance

Collect public Instagram profile and recent-post metrics as timestamped analytics snapshots with engagement and posting KPIs.

Pricing

from $1.01 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Automation Lab

Automation Lab

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

11 days ago

Last modified

Categories

Share

Collect Instagram account analytics for public profiles and turn recent post activity into timestamped KPI snapshots. Each dataset row combines profile totals, recent-post engagement, observed posting frequency, and optional post-level metrics so creator, competitor, and campaign teams can compare the same accounts over time.

No Instagram login or user-supplied cookies are required. The Actor uses public account data only and does not access private profiles.

What does this Instagram analytics scraper do?

For every supplied username or public profile URL, the Actor creates one snapshot with:

  • follower, following, and published-post totals;
  • verification and public/private status;
  • average likes, comments, and interactions across recent posts;
  • median interactions to reduce the effect of one viral post;
  • engagement rate normalized by current follower count;
  • observed posts per week and observation-window length;
  • latest observed post timestamp;
  • optional recent-post URLs, captions, dates, likes, comments, and per-post engagement.

Snapshots include snapshotAt, making scheduled dataset exports suitable for longitudinal benchmarks.

Who is it for?

  • Creator managers comparing activity and visible engagement across a roster.
  • Brand and campaign teams benchmarking public partner or competitor accounts.
  • Agencies preparing repeatable creator qualification reports.
  • Analysts loading consistent Instagram metrics into spreadsheets, warehouses, or dashboards.
  • Developers adding public account benchmarks to an existing pipeline through the Apify API.

Choose Instagram Profile Posts Scraper when you need each post as a separate dataset row or more than the latest 12 posts. Choose Instagram Profile Stats Scraper for profile qualification filters without this Actor's timestamped posting-frequency snapshot.

Why use account snapshots?

Raw post records require downstream grouping before they answer account-level questions. This Actor calculates a compact, comparable row per account. Running the same Task on a schedule creates observations that can be joined by username and ordered by snapshotAt to measure visible changes.

The calculations use up to 12 recent public posts returned by Instagram. They are an observed recent-post sample, not lifetime analytics or private Instagram Insights.

Input

FieldTypeDefaultDescription
usernamesstring arrayemptyInstagram usernames, with or without @. The editor prefills examples; these are not runtime defaults.
profileUrlsURL arrayemptyPublic instagram.com/<username>/ profile URLs.
maxProfilesinteger25Maximum unique profiles to process, from 1 to 100.
maxPostsPerProfileinteger12Recent posts used for calculations, from 1 to 12.
includePostDetailsbooleantrueInclude the sampled posts inside each account row.
proxyConfigurationobjectApify ProxyProxy configuration. Disable explicitly to request directly.

You can combine usernames and profileUrls; duplicates are removed case-insensitively. Only the first maxProfiles unique accounts are processed. At least one account is required. Post/Reel URLs, reserved paths and malformed entries are rejected before charging the start event. Boolean options must be JSON booleans, not strings.

Getting started

  1. Open the Actor input page.
  2. Enter one or more real public usernames or profile URLs.
  3. Keep 12 recent posts for the broadest available observation window.
  4. Turn off post details if you only need compact account KPI rows.
  5. Run the Actor and open Account analytics snapshots in the default dataset.
  6. Export JSON, CSV, Excel, XML, or connect the dataset API to your pipeline.

Example input:

{
"usernames": ["nasa", "instagram"],
"maxProfiles": 2,
"maxPostsPerProfile": 12,
"includePostDetails": true
}

Output fields

FieldMeaning
snapshotAtUTC timestamp when this account snapshot was created.
username, profileId, profileUrlStable account identity and public URL.
followersCount, followingCount, postsCountPublic profile counters observed at run time.
recentPostsAnalyzedNumber of recent posts included in calculations.
averageLikes, averageComments, averageInteractionsArithmetic means over sampled posts.
medianInteractionsMedian of likes plus comments across sampled posts.
engagementRateAverage interactions divided by current followers, as a percentage.
postsPerWeekPosting frequency observed between oldest and newest sampled posts.
observationWindowDaysDays covered by the sampled posts.
latestPostAtTimestamp of the newest sampled post.
recentPostsOptional post-level observations nested within the account snapshot row.
sampleQualityTimeline availability and counts of returned, invalid, duplicate, valid and post-limit-omitted observations.

Nullable KPIs mean there was not enough valid visible data for that calculation. Missing, negative, fractional or unsafe counters are not measured zero. Account/post IDs preserve usable source strings exactly, including large decimal strings; numeric IDs must be positive safe integers. Malformed IDs are never coerced from objects or booleans. An account with an invalid identity or unavailable profile totals is rejected; a post with unavailable/invalid likes, comments, identity or date is excluded from all calculations and counted in sampleQuality.invalidObservations. Duplicate post identities are counted and excluded. Remaining valid posts are sorted newest-first before the post limit. Genuine zero counters remain valid.

observationWindowDays is the actual interval between the newest and oldest selected valid posts: a six-hour window is 0.25 days. Two equal timestamps have a zero window and null cadence. One valid post has a zero window and null cadence; no valid posts have null window and cadence. Frequency is (sample size - 1) / window days × 7 only for positive windows. Hiding recentPosts does not change KPIs.

Machine-readable run outcomes

The output tab links to the unbilled KVS record RUN_SUMMARY. It contains unique requested, selected, omittedByLimit, saved, charged, failed and notAttempted counts, stoppedByChargeLimit, status, fatalPhase, optional fatalAccountIndex, and outcomes. Each outcome's accountIndex is the zero-based position in the normalized, deduplicated username-plus-URL list; sanitized reason codes, HTTP status and attempts let you reconcile failures without dataset error rows. notAttempted is separate from failed accounts. A depleted charge budget stops further work and can finish without rows; this is explicitly marked, not a source success. Input validation failures have no summary because no account list was accepted. Storage failure can prevent the summary itself from being saved.

Example output

{
"recordType": "accountAnalyticsSnapshot",
"snapshotAt": "2026-08-25T20:53:56.806Z",
"profileId": "528817151",
"username": "nasa",
"fullName": "NASA",
"profileUrl": "https://www.instagram.com/nasa/",
"followersCount": 104428106,
"followingCount": 92,
"postsCount": 4891,
"isVerified": true,
"isPrivate": false,
"recentPostsAnalyzed": 3,
"averageLikes": 966248.33,
"averageComments": 2710,
"averageInteractions": 968958.33,
"medianInteractions": 418678,
"engagementRate": 0.9279,
"postsPerWeek": 2.091,
"observationWindowDays": 6.7,
"latestPostAt": "2026-08-19T14:11:47.000Z"
}

Counts change over time. The example demonstrates the output shape rather than promising current values.

How much does it cost to analyze Instagram accounts?

Pricing has two events: a $0.002 start fee per run and one account-snapshot event per useful account row. The current BRONZE account price is $0.00168 per snapshot, with lower rates on higher platform tiers. Failed, private, missing, or duplicate accounts do not produce an account charge. The account row is saved before its item charge; a rejected dataset write produces no item charge. Saving and billing are separate supported SDK operations, not an atomic transaction. A billing failure after saving stops the run with a fatal billing verdict and preserves the saved-row count; interrupted or ambiguous requests require checking platform storage/billing state. A storage failure is fatal, not a skipped profile.

At BRONZE rates:

Useful snapshotsBRONZE event-price calculation
10.002 + (1 × 0.00168) = 0.00368 USD
100.002 + (10 × 0.00168) = 0.0188 USD
1000.002 + (100 × 0.00168) = 0.170 USD

Apify platform usage and proxy costs may also apply according to your plan. Batch accounts into one run when practical because the start event is charged once per run.

Schedule recurring creator benchmarks

Save the input as an Apify Task and add a daily, weekly, or monthly schedule. Export each run's dataset to a warehouse or append it to a table keyed by username and snapshotAt. This supports trend charts for follower totals, posting frequency, and visible engagement without claiming private historical data.

Use a consistent maxPostsPerProfile across runs to keep the sample definition comparable. A change in the posts visible from Instagram can still affect the observation window.

Integrations

Common workflows include:

  • send every completed dataset to Google Sheets through Make or Zapier;
  • load JSON or CSV into BigQuery, Snowflake, or a data lake;
  • trigger a webhook when a scheduled benchmark finishes;
  • compare snapshots in Python or a BI dashboard;
  • enrich an approved creator roster with current public signals.

Apify datasets provide pagination and multiple export formats without changing Actor output.

API usage with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~instagram-account-post-analytics/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"usernames":["nasa"],"maxPostsPerProfile":12}'

Use the returned run ID to inspect status and follow defaultDatasetId when the run succeeds.

API usage with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/instagram-account-post-analytics').call({
usernames: ['nasa', 'instagram'],
maxPostsPerProfile: 12,
includePostDetails: false,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API usage with Python

from apify_client import ApifyClient
client = ApifyClient(token='YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/instagram-account-post-analytics').call(run_input={
'profileUrls': [{'url': 'https://www.instagram.com/nasa/'}],
'maxPostsPerProfile': 12,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Store tokens in environment variables or a secret manager rather than source code.

Use with Apify MCP

Claude Code setup:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/instagram-account-post-analytics"

Claude Desktop, Cursor, and VS Code setup:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/instagram-account-post-analytics"
}
}
}

Example prompts:

  • “Run Instagram account analytics for nasa and instagram and summarize engagement differences.”
  • “Create a compact snapshot for this list of public profile URLs without post details.”
  • “Export the completed account benchmark dataset as CSV.”

Accuracy and limitations

  • Only anonymous public profile data is supported; private, restricted, removed, or login-only accounts are skipped.
  • Instagram may rate-limit, restrict anonymous access or change its public response shape. There are at most four API attempts with bounded backoff. A rejected anonymous route can attempt one public profile-embed bootstrap, then replay the complete API with a coherent temporary cookie/header/proxy session. This adds at most one bootstrap request; it does not use the incomplete embed as an analytics row or automatically switch proxy tiers. A rejected cross-host session replay may spend one remaining API attempt on the bootstrap's same-origin public API before retiring that session. Rejected same-origin sessions are retired. Private/missing targets and identity mismatches are not retried.
  • An upstream HTTP 400 schema/asset deletion is a source rejection, not necessarily caller error. Session renewal does not guarantee recovery of a source schema fault. Public access restrictions remain possible even for real public profiles.
  • Up to 12 recent posts per profile are available from the selected public surface.
  • Likes and comments are visible source counters, not private reach, saves, impressions, or audience demographics.
  • postsPerWeek describes the sampled observation window. It is not a lifetime posting average.
  • Follower-normalized engagement uses the follower count at snapshot time, not the historical count at each post date.
  • Successful account rows are preserved when another account in the batch fails; all-source-failed batches fail. Fatal storage/billing errors also fail even if earlier rows were saved. Inspect the dataset and RUN_SUMMARY together.

Support and data handling

This Actor does not use AI or send data to an AI provider. Instagram is referenced to describe compatible public data; this Actor is not affiliated with or endorsed by Instagram or Meta. Public profile identities, biographies and captions appear only as documented output. Source response bodies and proxy sessions are not retained by this Actor. Dataset, KVS and log retention follow your Apify account settings; delete the run's storages through Apify when no longer needed. Custom proxy providers receive the public target requests under your chosen configuration. For help, open an issue on this Actor's Apify Store page; do not post credentials or private data.

Diagnostics and privacy

Failed operations send sanitized diagnostic input, exceptions and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL queries are removed; reports are retained for 30 days. Partial account-operation failures can be reported even when the batch succeeds. Bounded request-phase, attempt, HTTP status and response-shape categories help distinguish exhausted access routes. Raw upstream bodies, request headers, cookies and proxy credentials are not included in classified account failure reports.

Legality and responsible use

Collect only public data that you are authorized to process. Follow Instagram's terms, Apify's policies, applicable privacy and data-protection law, and your organization's retention rules. Do not use the Actor for harassment, sensitive profiling, access control, or attempts to bypass private-account protections. Avoid making consequential decisions from one public engagement metric without suitable review and context.

Troubleshooting

The Actor returned “no usable public profiles.” Check spelling and confirm the profile is currently public in an anonymous browser. Run a small real account input and leave Apify Proxy enabled.

Some accounts are missing from the dataset. Open RUN_SUMMARY for classified failures, input-limit omissions and unattempted accounts. Public/private status and complete profile totals must be verifiable. Invalid posts are excluded rather than converted to zeros. Failed source accounts and rejected writes are not charged as account snapshots.

Posting frequency is null. At least two valid distinct posts spanning positive elapsed time are needed. Equal timestamps cannot establish cadence.

The engagement rate differs from another tool. Confirm the formula and sample. This Actor uses average visible likes plus comments across the selected recent posts divided by current followers.

FAQ

Does this require an Instagram login?

No. It uses anonymous public profile data and does not accept Instagram credentials.

Can it scrape private profiles?

No. Private-account protections are intentionally respected.

Does it provide historical analytics?

It does not reconstruct private history. Each run is a timestamped current snapshot. Schedule recurring runs to build your own permitted observation series.

Are post details billed separately?

No. Optional sampled post details are included within the account snapshot price.

Can I process profile URLs and usernames together?

Yes. Both inputs are normalized and deduplicated before the maxProfiles limit is applied.