{
  "data": {
    "id": "beoZ7eeJAe7t2HXq1",
    "actId": "Y7Ib4ARpUHw5Ue8op",
    "userId": "9Um4NEFR7z42j35AD",
    "startedAt": "2026-08-16T17:54:25.945Z",
    "finishedAt": "2026-08-16T17:55:21.970Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 55951,
      "runTimeSecs": 55.951,
      "computeUnits": 0.06216777777777778,
      "imageSizeBytes": 530144256
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Instagram Metrics Scraper input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Input handling\",\n      \"type\": \"string\",\n      \"description\": \"Choose how to use the inputs below. Auto-detect accepts post URLs, reel URLs, profile URLs, @handles, and shortcodes in the same list.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"auto\",\n        \"contentUrls\",\n        \"profileUrls\"\n      ],\n      \"enumTitles\": [\n        \"Auto-detect URLs, handles, and shortcodes\",\n        \"Post and reel URLs only\",\n        \"Profile discovery only\"\n      ],\n      \"sectionCaption\": \"Choose Instagram inputs\",\n      \"sectionDescription\": \"Paste public Instagram post URLs, reel URLs, profile URLs, @handles, or shortcodes once. Content URLs collect metrics directly. Profile URLs and @handles discover public recent content first, then collect metrics for those posts or reels.\",\n      \"default\": \"auto\"\n    },\n    \"startUrls\": {\n      \"title\": \"Instagram URLs, @handles, or shortcodes\",\n      \"type\": \"array\",\n      \"description\": \"Paste public Instagram post URLs, reel URLs, carousel URLs, profile URLs, @handles, or shortcodes. Every direct content input is processed unless you set an optional total row cap.\",\n      \"editor\": \"stringList\",\n      \"minItems\": 0,\n      \"uniqueItems\": true,\n      \"items\": {\n        \"type\": \"string\",\n        \"pattern\": \"^\\\\s*(?:(?:https?:\\\\/\\\\/)?(?:(?:www\\\\.)?instagram\\\\.com)\\\\/\\\\S+|@[A-Za-z0-9._]+|[A-Za-z0-9._-]{5,})\\\\s*$\"\n      },\n      \"default\": [\n        \"https://www.instagram.com/reel/DIwcCZgxVZP/\"\n      ],\n      \"prefill\": [\n        \"https://www.instagram.com/reel/DIwcCZgxVZP/\"\n      ]\n    },\n    \"urls\": {\n      \"title\": \"Legacy content URLs\",\n      \"type\": \"array\",\n      \"description\": \"Backward-compatible hidden field for API users that send Instagram content URLs as urls.\",\n      \"editor\": \"hidden\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": []\n    },\n    \"shortcodes\": {\n      \"title\": \"Legacy shortcodes\",\n      \"type\": \"array\",\n      \"description\": \"Backward-compatible hidden field for API users that send Instagram shortcodes directly.\",\n      \"editor\": \"hidden\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": []\n    },\n    \"profileUrls\": {\n      \"title\": \"Legacy profile URLs\",\n      \"type\": \"array\",\n      \"description\": \"Backward-compatible hidden field for API users that send Instagram profile URLs or @handles as profileUrls.\",\n      \"editor\": \"hidden\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": []\n    },\n    \"maxItems\": {\n      \"title\": \"Optional total row cap\",\n      \"type\": \"integer\",\n      \"description\": \"Optional maximum metric rows across direct content and profile discovery. Leave blank to process every public item the Actor can find. Large values such as 999999 are accepted.\",\n      \"editor\": \"number\",\n      \"minimum\": 1\n    },\n    \"includeProfileSnapshot\": {\n      \"title\": \"Legacy profile option\",\n      \"type\": \"boolean\",\n      \"description\": \"Backward-compatible hidden field for older API users.\",\n      \"editor\": \"hidden\",\n      \"default\": true\n    }\n  }\n}",
    "readme": "# Instagram Metrics Scraper\n\n## 📊 What does Instagram Metrics Scraper do?\n\nInstagram Metrics Scraper collects public metrics from Instagram post URLs,\nreel URLs, carousel URLs, shortcodes, profile URLs, and `@handles`.\n\nUse it when you need clean Instagram rows for creator research, influencer\nreporting, campaign tracking, competitor monitoring, social analytics,\ndashboards, warehouse loads, and scheduled metric snapshots.\n\nThe Actor returns flat CSV/API-friendly rows with Instagram views, plays, likes,\ncomments, public owner/collaborator context, IDs, captions, media links,\nduration, status fields, and count availability details.\n\nThis Actor does not log in, use cookies, scrape private Instagram content,\ncollect comment text, scrape stories, scrape follower lists, or bypass\nInstagram access controls. It only returns data available from public Instagram\ncontent at run time.\n\nWith Instagram Metrics Scraper, you can:\n\n- 📈 Track public Instagram post, reel, carousel, and image performance.\n- 👤 Discover recent public content from Instagram profile URLs and `@handles`.\n- 👀 Collect public views, plays, Instagram plays, likes, and comments when\n  available.\n- 🤝 Capture public owner and collaborator profiles in one clean collaboration\n  field.\n- 🆔 Extract useful IDs such as `postId`, `shortCode`, `profileId`, `fbPostId`,\n  `fbOwnerId`, and `carouselIds`.\n- 🎬 Save captions, publish time, media type, media links, video duration, and\n  audio presence when available.\n- 🎯 Check metric availability instead of treating every blank count as zero.\n- 📦 Export results as JSON, JSONL, CSV, Excel, XML, RSS, or HTML.\n\n## 📦 What Instagram metric data can I extract?\n\nEach dataset row represents one public Instagram content item with at least one\npublic post metric.\n\n| Data group       | Example fields                                                                                 |\n| ---------------- | ---------------------------------------------------------------------------------------------- |\n| 🔗 Source        | `platform`, `inputUrl`, `postUrl`, `status`, `statusReason`, `scrapedAt`                       |\n| 🆔 Post identity | `postId`, `fbPostId`, `shortCode`, `mediaType`, `publishedAt`                                  |\n| 🧾 Post content  | `title`, `caption`, `downloadUrl`, `carouselIds`, `videoDurationSeconds`, `hasAudio`           |\n| 👤 Creator       | `profileId`, `fbOwnerId`, `profileHandle`, `profileUrl`, `profileVerified`, `profileAvatarUrl` |\n| 📊 Metrics       | `views`, `plays`, `playsInstagram`, `likes`, `comments`                                        |\n| 🎯 Count quality | `postMetricStatus`, `profileMetricStatus`                                                      |\n| 🤝 Collaboration | `collaborationCount`, `collaborationProfiles`                                                  |\n\nMetric availability depends on what Instagram exposes publicly for each URL or\nprofile. If a public count is unavailable, the Actor keeps it unavailable\ninstead of filling it with a fake zero.\n\nFor reels and video posts, `views`, `plays`, and `playsInstagram` are kept as\nseparate public counters. Some URLs expose one count but not the others, so\nmissing values stay missing instead of being guessed or mixed.\n\n`collaborationProfiles` contains the public owner and confirmed collaborators\nwhen available. Tagged accounts are not treated as collaborators by default.\n\n## ⚙️ Can I use this Actor through an API?\n\nYes. You can run Instagram Metrics Scraper manually in Apify Console or use it\nthrough:\n\n- Apify API\n- Python SDK\n- Node.js SDK\n- Webhooks\n- Scheduled runs\n- Apify integrations\n\nThis makes it useful for social media dashboards, influencer lists, competitive\nintelligence, creator databases, campaign reporting, data warehouses, and\nautomated market research workflows.\n\n## 🎯 Why scrape Instagram post and reel metrics?\n\nInstagram public metrics help you understand which creators, posts, reels,\ncampaigns, products, and competitors are gaining traction.\n\n| Use case                     | How Instagram metric data helps                                                      |\n| ---------------------------- | ------------------------------------------------------------------------------------ |\n| 📈 Track creator performance | Monitor public engagement across known creator post and reel URLs.                   |\n| 🧑‍🎤 Research influencers      | Compare recent content performance, captions, collaborators, and profile context.    |\n| 📣 Measure campaigns         | Collect repeatable snapshots for campaign posts, reels, and creator deliverables.    |\n| 🕵️ Monitor competitors       | Track public metrics for competing brands, products, and creator accounts.           |\n| 🤝 Audit collaborations      | See public owner and collaborator profiles in a single normalized field.             |\n| 📊 Build reporting workflows | Feed normalized Instagram metrics into dashboards, spreadsheets, APIs, and BI tools. |\n| 🔎 Audit availability        | Separate available, unavailable, blocked, invalid, and failed rows cleanly.          |\n\n## 💵 How much does scraping Instagram metrics cost?\n\nInstagram Metrics Scraper uses Pay Per Event pricing. One billable event is one\nInstagram metric row written to the default dataset.\n\nEvery direct content input is processed by default. Use the optional `maxItems`\nsetting only when you want a total row cap. Use `maxItemsPerProfile` to control\nprofile discovery. Start with a small batch of 3 to 10 URLs when testing a new\nURL list or profile set.\n\n## 🚀 How do I use Instagram Metrics Scraper?\n\n1. Create or log in to your Apify account.\n2. Open **Instagram Metrics Scraper**.\n3. Choose **Auto-detect URLs, handles, and shortcodes**, **Post and reel URLs\n   only**, or **Profile discovery only**.\n4. Paste Instagram post URLs, reel URLs, profile URLs, `@handles`, shortcodes,\n   or a mix of them.\n5. Set an optional total row cap, or leave it blank to process every direct input.\n6. Leave the default settings for your first run.\n7. Click **Start**.\n8. Open the **Output** tab to inspect the dataset and run summary.\n9. Download your data in JSON, JSONL, CSV, Excel, XML, RSS, or HTML.\n\n## ⬇️ Input\n\nThe main input is `startUrls`. Paste at least one Instagram content URL, profile\nURL, `@handle`, or shortcode. `https://` is optional for normal Instagram URLs.\n\nIn **Auto-detect URLs, handles, and shortcodes** mode, you can paste direct\ncontent URLs and profile inputs into the same list. Every direct content input\nis processed unless you set an optional total row cap.\n\n```json\n{\n  \"mode\": \"contentUrls\",\n  \"startUrls\": [\"https://www.instagram.com/reel/DIwcCZgxVZP/\"]\n}\n```\n\n### 🔗 Instagram URLs and handles\n\nSupported input shapes include:\n\n```text\nhttps://www.instagram.com/reel/CODE1234567/\nhttps://www.instagram.com/p/CODE7654321/\nhttps://www.instagram.com/tv/CODE2222222/\nwww.instagram.com/reel/CODE1234567/\nCODE1234567\nhttps://www.instagram.com/mrbeast/\n@mrbeast\n```\n\nUse direct URLs when you need exact known media. Use profile discovery when you\nwant recent public content from a creator, brand, or competitor profile.\n\n### 👤 Profile discovery\n\nUse profile discovery when you want the Actor to find recent public posts and\nreels from an Instagram profile before collecting metrics.\n\n```json\n{\n  \"mode\": \"profileUrls\",\n  \"startUrls\": [\"@mrbeast\"],\n  \"maxItemsPerProfile\": 10\n}\n```\n\nUse `maxItemsPerProfile` to control how many public content URLs are discovered\nfrom each profile input. Set `maxItems` only when you also want an optional cap\nacross the whole run.\n\n### 🎛️ Settings\n\n| Option               | What it does                                                                                       |\n| -------------------- | -------------------------------------------------------------------------------------------------- |\n| `mode`               | `auto` to detect mixed inputs, `contentUrls` for content URLs only, or `profileUrls` for profiles. |\n| `startUrls`          | Instagram content URLs, shortcodes, profile URLs, or `@handles`.                                   |\n| `maxItems`           | Optional total row cap. Leave blank to process every direct content input.                         |\n| `maxItemsPerProfile` | Maximum public content URLs to discover from each profile input.                                   |\n\n## ⬆️ Output sample\n\nThe results are stored in the default dataset. Each result is one Instagram\nmetric row.\n\n```json\n{\n  \"platform\": \"instagram\",\n  \"inputUrl\": \"https://www.instagram.com/reel/CODE1234567/\",\n  \"postUrl\": \"https://www.instagram.com/reel/CODE1234567/\",\n  \"postId\": \"3922329444068919711\",\n  \"fbPostId\": \"18066137273686492\",\n  \"shortCode\": \"CODE1234567\",\n  \"mediaType\": \"reel\",\n  \"title\": null,\n  \"caption\": \"Example campaign reel #launch\",\n  \"publishedAt\": \"2026-06-23T13:00:00.000Z\",\n  \"profileId\": \"123456789\",\n  \"fbOwnerId\": \"17841400000000000\",\n  \"profileHandle\": \"examplebrand\",\n  \"profileUrl\": \"https://www.instagram.com/examplebrand/\",\n  \"profileVerified\": true,\n  \"profileAvatarUrl\": \"https://scontent.cdninstagram.com/avatar.jpg\",\n  \"downloadUrl\": \"https://scontent.cdninstagram.com/example.mp4\",\n  \"carouselIds\": null,\n  \"videoDurationSeconds\": 42.1,\n  \"hasAudio\": true,\n  \"views\": 1234567,\n  \"plays\": 1234999,\n  \"playsInstagram\": 1234888,\n  \"likes\": 23456,\n  \"comments\": 345,\n  \"postMetricStatus\": [\n    {\n      \"metric\": \"views\",\n      \"value\": 1234567,\n      \"status\": \"present\",\n      \"precision\": \"exact\",\n      \"rawValue\": 1234567\n    }\n  ],\n  \"collaborationCount\": 1,\n  \"collaborationProfiles\": [\n    {\n      \"id\": \"123456789\",\n      \"handle\": \"examplebrand\",\n      \"url\": \"https://www.instagram.com/examplebrand/\",\n      \"role\": \"owner\"\n    }\n  ],\n  \"profileMetricStatus\": [\n    {\n      \"metric\": \"profileFollowersCount\",\n      \"value\": null,\n      \"status\": \"unavailable\",\n      \"precision\": \"unavailable\",\n      \"rawValue\": null\n    }\n  ],\n  \"status\": \"ok\",\n  \"statusReason\": null,\n  \"scrapedAt\": \"2026-06-24T15:00:00.000Z\"\n}\n```\n\n`inputUrl` preserves the input that produced the row. `postUrl` is the resolved\npublic Instagram content URL.\n\nWhen a saved row has a missing public metric, that metric is returned as `null`,\nnot `0`. Inputs with no public `views`, `plays`, `playsInstagram`, `likes`, or\n`comments` are reported in `OUTPUT` and are not saved as dataset rows.\n\n## 🎯 Metric status\n\nInstagram can expose exact, rounded, delayed, hidden, or unavailable counters\ndepending on content type and public visibility. The status fields make that\nvisible:\n\n- `present`: the metric was found.\n- `unavailable`: Instagram did not expose the metric publicly for that row.\n- `not_attempted`: the metric was not attempted for that row.\n- `exact`: the public value appeared as a full integer.\n- `display_rounded` or `likely_rounded`: the public value was rounded.\n\nThis lets you filter rows without guessing whether a blank value means zero.\n\n## 👀 Views and plays\n\nFor reels and video posts, the Actor keeps video count families separate:\n\n- `views`\n- `plays`\n- `playsInstagram`\n\nThese fields may differ or appear independently. Keeping them separate makes the\ndataset safer for analytics and prevents one public count from silently filling\nanother.\n\n## 🤝 Collaborations\n\n`collaborationProfiles` contains the public owner and confirmed collaborators\nfor a post when available. Each profile includes:\n\n- `id`\n- `handle`\n- `url`\n- `role`, either `owner` or `collaborator`\n\nTagged accounts are not treated as collaborators by default.\n\n## 🚦 Status values\n\nSaved rows use explicit statuses, and no-metric or failed inputs are summarized\nin `OUTPUT`:\n\n| Status                       | Meaning                                                                                            |\n| ---------------------------- | -------------------------------------------------------------------------------------------------- |\n| `ok`                         | Public content was resolved and at least one useful public metric or metadata field was collected. |\n| `resolved_no_public_metrics` | The input resolved, but public metric fields were not exposed for that item.                       |\n| `invalid_input`              | The input was not a valid Instagram URL, shortcode, or handle.                                     |\n| `unsupported_url`            | The URL is an Instagram surface this Actor does not support.                                       |\n| `blocked_or_challenged`      | Instagram returned a login, challenge, unavailable, or blocked response.                           |\n| `failed`                     | The input could not be resolved after retry.                                                       |\n\nRuns with setup issues, zero discovered profile content, blocked responses, or\nno exposed public post metrics finish with a clear `OUTPUT` summary instead of\nending as failed runs. Check `OUTPUT.stopReason`, `OUTPUT.statusMessage`,\n`OUTPUT.skippedNoPostMetricRows`, and `OUTPUT.validationErrors` when no metric\nrows are saved.\n\n## ⚠️ Notes and limitations\n\n- Public metrics can be hidden, rounded, delayed, or unavailable.\n- Reels and video posts may expose different view and play counters.\n- Image posts and carousels do not always have video-specific metrics.\n- Profile discovery returns recent public content and may return fewer rows than\n  requested.\n- Private, deleted, login-only, age-gated, or restricted content returns status\n  rows instead of private data.\n- Media links can expire or become unavailable after collection.\n- This Actor is not affiliated with Instagram or Meta.\n\n## 🔗 Related social media scrapers\n\nContinue the same workflow on this platform or compare public data across\nplatforms.\n\n### Continue on Instagram\n\n- [Instagram Profile Scraper](https://apify.com/chronometrica/instagram-channel-scraper)\n  — collect public profile details, links, and audience stats.\n- [Instagram Search Scraper](https://apify.com/chronometrica/instagram-search-scraper)\n  — find public Reels and metrics by keyword.\n- [Instagram Comments Scraper](https://apify.com/chronometrica/instagram-comments-scraper)\n  — collect public comments, authors, dates, likes, and reply counts.\n\n### Compare metrics across platforms\n\n- [Facebook Metrics Scraper](https://apify.com/chronometrica/facebook-metrics-scraper)\n  — collect public post, Reel, video, photo, and profile metrics.\n- [TikTok Metrics Scraper](https://apify.com/chronometrica/tiktok-metrics-scraper)\n  — collect public video, profile, engagement, hashtag, and music data.\n- [YouTube Metrics Scraper](https://apify.com/chronometrica/youtube-metrics-scraper)\n  — collect public video, Short, channel, and engagement metrics.\n- [Snapchat Spotlight Metrics Scraper](https://apify.com/chronometrica/snapchat-metrics-scraper)\n  — collect public Spotlight post views, engagement, creator, and media data.\n- [X Post Metrics Scraper](https://apify.com/chronometrica/x-post-metrics)\n  — collect public post views, engagement, media, and author details.\n",
    "changelog": "# Changelog\n\n## 1.0.5\n\n- Improved large-run reliability by stopping cleanly before the Actor time\n  limit instead of ending with a hard timeout.\n- Completed rows are preserved, and the run summary now reports\n  `time_budget_reached` when some inputs remain unprocessed.\n\n## 1.0.4\n\n- Improved performance and metric accuracy for public reel and video rows,\n  especially `plays` and `playsInstagram` when Instagram exposes those counts.\n- Kept unavailable counts explicit as `null` with metric status records instead\n  of filling missing public values with fake zeroes.\n\n## 1.0.3\n\n- Improved public run reliability: setup issues, blocked responses, zero\n  discovered profile content, and no exposed public metrics now finish with a\n  clear `OUTPUT` summary instead of intentionally failing the run.\n- Removed the public no-metrics strict failure option; legacy API values are\n  ignored for backward-compatible successful summaries.\n\n## 1.0.2\n\n- Improved metric matching for direct Instagram content URLs so public counts are\n  tied more reliably to the requested post or reel.\n\n## 1.0.1\n\n- Switched the public quick-start example and Console prefill to a one-row\n  MrBeast reel URL while keeping the same buyer-facing coverage and run\n  controls.\n\n## 1.0.0\n\n- Initial public release of Instagram Metrics Scraper.\n- Added support for public Instagram post URLs, reel URLs, carousel URLs,\n  shortcodes, profile URLs, and `@handles`.\n- Added mixed-input mode, content-URL mode, and profile-discovery mode.\n- Added one-row-per-content output for posts, reels, carousels, images, videos,\n  and profile-discovered content.\n- Added public metric fields for `views`, `plays`, `playsInstagram`, `likes`,\n  and `comments` when available.\n- Added metric status records so unavailable counts stay explicit instead of\n  being converted to zero.\n- Added public creator and post identifiers, including post ID, shortcode,\n  profile ID, Facebook bridge IDs, and carousel child IDs when available.\n- Added collaboration rollup fields for public owner and collaborator profiles.\n- Added media fields for captions, publish time, media type, download URL,\n  video duration, and audio presence when available.\n- Added row-level statuses for invalid input, unsupported URLs, unavailable\n  public metrics, restricted content, blocked responses, and failed requests.\n- Added run caps for total metric rows and per-profile discovery rows.\n- Added public metric availability handling for harder URL batches.\n- Added proxy, timeout, concurrency, and unavailable-metric run controls.\n- Added compact run summary output and dataset schemas for Apify Store usage.\n- Added tests for output shaping, metric status, collaboration fields, URL\n  normalization, media type handling, and unavailable-metric behavior.\n",
    "actorDefinition": {
      "$schema": "https://apify.com/schemas/v1/actor.ide.json",
      "actorSpecification": 1,
      "name": "instagram-metrics-scraper",
      "title": "Instagram Metrics Scraper - Posts, Reels & Profiles",
      "description": "Collect clean metric rows for public Instagram posts, reels, carousels, and recent profile content. Get views, plays, likes, comments, collaborators, captions, IDs, media links, and status fields without fake zeroes.",
      "seoTitle": "Instagram Metrics Scraper for Posts, Reels & Profiles",
      "seoDescription": "Scrape public Instagram metrics from post URLs, reel URLs, shortcodes, and profile handles. Export views, plays, likes, comments, collaborator profiles, IDs, media links, and status rows.",
      "categories": [
        "SOCIAL_MEDIA"
      ],
      "version": "1.0",
      "buildTag": "latest",
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 3600,
        "memoryMbytes": 1024
      },
      "exampleRunInput": {
        "contentType": "application/json; charset=utf-8",
        "body": "{\n    \"mode\": \"contentUrls\",\n    \"startUrls\": [\n        \"https://www.instagram.com/reel/DIwcCZgxVZP/\"\n    ]\n}"
      },
      "input": {
        "title": "Instagram Metrics Scraper input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Input handling",
            "type": "string",
            "description": "Choose how to use the inputs below. Auto-detect accepts post URLs, reel URLs, profile URLs, @handles, and shortcodes in the same list.",
            "editor": "select",
            "enum": [
              "auto",
              "contentUrls",
              "profileUrls"
            ],
            "enumTitles": [
              "Auto-detect URLs, handles, and shortcodes",
              "Post and reel URLs only",
              "Profile discovery only"
            ],
            "sectionCaption": "Choose Instagram inputs",
            "sectionDescription": "Paste public Instagram post URLs, reel URLs, profile URLs, @handles, or shortcodes once. Content URLs collect metrics directly. Profile URLs and @handles discover public recent content first, then collect metrics for those posts or reels.",
            "default": "auto"
          },
          "startUrls": {
            "title": "Instagram URLs, @handles, or shortcodes",
            "type": "array",
            "description": "Paste public Instagram post URLs, reel URLs, carousel URLs, profile URLs, @handles, or shortcodes. Every direct content input is processed unless you set an optional total row cap.",
            "editor": "stringList",
            "minItems": 0,
            "uniqueItems": true,
            "items": {
              "type": "string",
              "pattern": "^\\s*(?:(?:https?:\\/\\/)?(?:(?:www\\.)?instagram\\.com)\\/\\S+|@[A-Za-z0-9._]+|[A-Za-z0-9._-]{5,})\\s*$"
            },
            "default": [
              "https://www.instagram.com/reel/DIwcCZgxVZP/"
            ],
            "prefill": [
              "https://www.instagram.com/reel/DIwcCZgxVZP/"
            ]
          },
          "urls": {
            "title": "Legacy content URLs",
            "type": "array",
            "description": "Backward-compatible hidden field for API users that send Instagram content URLs as urls.",
            "editor": "hidden",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "shortcodes": {
            "title": "Legacy shortcodes",
            "type": "array",
            "description": "Backward-compatible hidden field for API users that send Instagram shortcodes directly.",
            "editor": "hidden",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "profileUrls": {
            "title": "Legacy profile URLs",
            "type": "array",
            "description": "Backward-compatible hidden field for API users that send Instagram profile URLs or @handles as profileUrls.",
            "editor": "hidden",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "maxItems": {
            "title": "Optional total row cap",
            "type": "integer",
            "description": "Optional maximum metric rows across direct content and profile discovery. Leave blank to process every public item the Actor can find. Large values such as 999999 are accepted.",
            "editor": "number",
            "minimum": 1
          },
          "includeProfileSnapshot": {
            "title": "Legacy profile option",
            "type": "boolean",
            "description": "Backward-compatible hidden field for older API users.",
            "editor": "hidden",
            "default": true
          }
        }
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Instagram Metrics Scraper output",
        "description": "Metric rows are stored in the default dataset. OUTPUT contains a compact run summary.",
        "properties": {
          "results": {
            "type": "string",
            "title": "Metric results",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "output": {
            "type": "string",
            "title": "Run summary",
            "template": "{{links.apiDefaultKeyValueStoreUrl}}/records/OUTPUT"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "fields": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "type": "object",
            "properties": {
              "platform": {
                "type": "string",
                "title": "Platform"
              },
              "inputUrl": {
                "type": "string",
                "title": "Input URL"
              },
              "postUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Post URL"
              },
              "postId": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Post ID"
              },
              "fbPostId": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "FB Post ID"
              },
              "shortCode": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Shortcode"
              },
              "mediaType": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Type"
              },
              "title": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Title"
              },
              "caption": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Caption"
              },
              "publishedAt": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time",
                "title": "Published At"
              },
              "profileId": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Profile ID"
              },
              "fbOwnerId": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "FB Owner ID"
              },
              "profileHandle": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Profile Handle"
              },
              "profileUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Profile URL"
              },
              "profileVerified": {
                "type": [
                  "boolean",
                  "null"
                ],
                "title": "Verified"
              },
              "profileAvatarUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Avatar"
              },
              "downloadUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Download URL"
              },
              "carouselIds": {
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": "string"
                },
                "title": "Carousel IDs"
              },
              "videoDurationSeconds": {
                "type": [
                  "number",
                  "null"
                ],
                "title": "Video Duration (Seconds)"
              },
              "hasAudio": {
                "type": [
                  "boolean",
                  "null"
                ],
                "title": "Has Audio"
              },
              "views": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Views"
              },
              "plays": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Plays"
              },
              "playsInstagram": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Plays (Instagram)"
              },
              "likes": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Likes"
              },
              "comments": {
                "type": [
                  "integer",
                  "null"
                ],
                "title": "Comments"
              },
              "postMetricStatus": {
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": "object",
                  "properties": {
                    "metric": {
                      "type": "string",
                      "enum": [
                        "views",
                        "plays",
                        "playsInstagram",
                        "likes",
                        "comments"
                      ]
                    },
                    "value": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "present",
                        "unavailable",
                        "not_attempted"
                      ]
                    },
                    "precision": {
                      "type": "string",
                      "enum": [
                        "exact",
                        "display_rounded",
                        "likely_rounded",
                        "unavailable",
                        "unknown"
                      ]
                    },
                    "rawValue": {
                      "type": [
                        "string",
                        "number",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "metric",
                    "value",
                    "status",
                    "precision",
                    "rawValue"
                  ]
                },
                "title": "Post Metric Status",
                "description": "Public precision metadata for post-level metrics."
              },
              "collaborationCount": {
                "type": "integer",
                "title": "Collaboration Count"
              },
              "collaborationProfiles": {
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "handle": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "url": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "role": {
                      "type": "string",
                      "enum": [
                        "owner",
                        "collaborator"
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "handle",
                    "url",
                    "role"
                  ]
                },
                "title": "Collaboration Profiles",
                "description": "Confirmed public owner and collaborator profiles for the post."
              },
              "profileMetricStatus": {
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": "object",
                  "properties": {
                    "metric": {
                      "type": "string",
                      "enum": [
                        "profileFollowersCount",
                        "profileFollowingCount"
                      ]
                    },
                    "value": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "present",
                        "unavailable",
                        "not_attempted"
                      ]
                    },
                    "precision": {
                      "type": "string",
                      "enum": [
                        "exact",
                        "display_rounded",
                        "likely_rounded",
                        "unavailable",
                        "unknown"
                      ]
                    },
                    "rawValue": {
                      "type": [
                        "string",
                        "number",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "metric",
                    "value",
                    "status",
                    "precision",
                    "rawValue"
                  ]
                },
                "title": "Profile Metric Status",
                "description": "Public precision metadata for profile-level metrics."
              },
              "status": {
                "type": "string",
                "title": "Status"
              },
              "statusReason": {
                "type": [
                  "string",
                  "null"
                ],
                "title": "Status detail"
              },
              "scrapedAt": {
                "type": "string",
                "format": "date-time",
                "title": "Scraped"
              }
            },
            "required": [
              "inputUrl",
              "status",
              "scrapedAt"
            ]
          },
          "views": {
            "overview": {
              "title": "Instagram metrics",
              "description": "One row per Instagram post, reel, carousel, or profile-discovered content item.",
              "transformation": {
                "fields": [
                  "platform",
                  "inputUrl",
                  "postUrl",
                  "postId",
                  "fbPostId",
                  "shortCode",
                  "mediaType",
                  "title",
                  "caption",
                  "publishedAt",
                  "profileId",
                  "fbOwnerId",
                  "profileHandle",
                  "profileUrl",
                  "profileVerified",
                  "profileAvatarUrl",
                  "downloadUrl",
                  "carouselIds",
                  "videoDurationSeconds",
                  "hasAudio",
                  "views",
                  "plays",
                  "playsInstagram",
                  "likes",
                  "comments",
                  "postMetricStatus",
                  "collaborationCount",
                  "collaborationProfiles",
                  "profileMetricStatus",
                  "status",
                  "statusReason",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "platform": {
                    "label": "Platform",
                    "format": "text"
                  },
                  "inputUrl": {
                    "label": "Input URL",
                    "format": "link"
                  },
                  "postUrl": {
                    "label": "Post URL",
                    "format": "link"
                  },
                  "postId": {
                    "label": "Post ID",
                    "format": "text"
                  },
                  "fbPostId": {
                    "label": "FB Post ID",
                    "format": "text"
                  },
                  "shortCode": {
                    "label": "Shortcode",
                    "format": "text"
                  },
                  "mediaType": {
                    "label": "Type",
                    "format": "text"
                  },
                  "title": {
                    "label": "Title",
                    "format": "text"
                  },
                  "caption": {
                    "label": "Caption",
                    "format": "text"
                  },
                  "publishedAt": {
                    "label": "Published At",
                    "format": "date"
                  },
                  "profileId": {
                    "label": "Profile ID",
                    "format": "text"
                  },
                  "fbOwnerId": {
                    "label": "FB Owner ID",
                    "format": "text"
                  },
                  "profileHandle": {
                    "label": "Profile Handle",
                    "format": "text"
                  },
                  "profileUrl": {
                    "label": "Profile URL",
                    "format": "link"
                  },
                  "profileVerified": {
                    "label": "Verified",
                    "format": "boolean"
                  },
                  "profileAvatarUrl": {
                    "label": "Avatar",
                    "format": "link"
                  },
                  "downloadUrl": {
                    "label": "Download URL",
                    "format": "link"
                  },
                  "carouselIds": {
                    "label": "Carousel IDs",
                    "format": "object"
                  },
                  "videoDurationSeconds": {
                    "label": "Video Duration (Seconds)",
                    "format": "number"
                  },
                  "hasAudio": {
                    "label": "Has Audio",
                    "format": "boolean"
                  },
                  "views": {
                    "label": "Views",
                    "format": "number"
                  },
                  "plays": {
                    "label": "Plays",
                    "format": "number"
                  },
                  "playsInstagram": {
                    "label": "Plays (Instagram)",
                    "format": "number"
                  },
                  "likes": {
                    "label": "Likes",
                    "format": "number"
                  },
                  "comments": {
                    "label": "Comments",
                    "format": "number"
                  },
                  "postMetricStatus": {
                    "label": "Post Metric Status",
                    "format": "object"
                  },
                  "collaborationCount": {
                    "label": "Collaboration Count",
                    "format": "number"
                  },
                  "collaborationProfiles": {
                    "label": "Collaboration Profiles",
                    "format": "object"
                  },
                  "profileMetricStatus": {
                    "label": "Profile Metric Status",
                    "format": "object"
                  },
                  "status": {
                    "label": "Status",
                    "format": "text"
                  },
                  "statusReason": {
                    "label": "Status detail",
                    "format": "text"
                  },
                  "scrapedAt": {
                    "label": "Scraped",
                    "format": "date"
                  }
                }
              }
            }
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "changelog": "# Changelog\n\n## 1.0.5\n\n- Improved large-run reliability by stopping cleanly before the Actor time\n  limit instead of ending with a hard timeout.\n- Completed rows are preserved, and the run summary now reports\n  `time_budget_reached` when some inputs remain unprocessed.\n\n## 1.0.4\n\n- Improved performance and metric accuracy for public reel and video rows,\n  especially `plays` and `playsInstagram` when Instagram exposes those counts.\n- Kept unavailable counts explicit as `null` with metric status records instead\n  of filling missing public values with fake zeroes.\n\n## 1.0.3\n\n- Improved public run reliability: setup issues, blocked responses, zero\n  discovered profile content, and no exposed public metrics now finish with a\n  clear `OUTPUT` summary instead of intentionally failing the run.\n- Removed the public no-metrics strict failure option; legacy API values are\n  ignored for backward-compatible successful summaries.\n\n## 1.0.2\n\n- Improved metric matching for direct Instagram content URLs so public counts are\n  tied more reliably to the requested post or reel.\n\n## 1.0.1\n\n- Switched the public quick-start example and Console prefill to a one-row\n  MrBeast reel URL while keeping the same buyer-facing coverage and run\n  controls.\n\n## 1.0.0\n\n- Initial public release of Instagram Metrics Scraper.\n- Added support for public Instagram post URLs, reel URLs, carousel URLs,\n  shortcodes, profile URLs, and `@handles`.\n- Added mixed-input mode, content-URL mode, and profile-discovery mode.\n- Added one-row-per-content output for posts, reels, carousels, images, videos,\n  and profile-discovered content.\n- Added public metric fields for `views`, `plays`, `playsInstagram`, `likes`,\n  and `comments` when available.\n- Added metric status records so unavailable counts stay explicit instead of\n  being converted to zero.\n- Added public creator and post identifiers, including post ID, shortcode,\n  profile ID, Facebook bridge IDs, and carousel child IDs when available.\n- Added collaboration rollup fields for public owner and collaborator profiles.\n- Added media fields for captions, publish time, media type, download URL,\n  video duration, and audio presence when available.\n- Added row-level statuses for invalid input, unsupported URLs, unavailable\n  public metrics, restricted content, blocked responses, and failed requests.\n- Added run caps for total metric rows and per-profile discovery rows.\n- Added public metric availability handling for harder URL batches.\n- Added proxy, timeout, concurrency, and unavailable-metric run controls.\n- Added compact run summary output and dataset schemas for Apify Store usage.\n- Added tests for output shaping, metric status, collaboration fields, URL\n  normalization, media type handling, and unavailable-metric behavior.\n",
      "readme": "# Instagram Metrics Scraper\n\n## 📊 What does Instagram Metrics Scraper do?\n\nInstagram Metrics Scraper collects public metrics from Instagram post URLs,\nreel URLs, carousel URLs, shortcodes, profile URLs, and `@handles`.\n\nUse it when you need clean Instagram rows for creator research, influencer\nreporting, campaign tracking, competitor monitoring, social analytics,\ndashboards, warehouse loads, and scheduled metric snapshots.\n\nThe Actor returns flat CSV/API-friendly rows with Instagram views, plays, likes,\ncomments, public owner/collaborator context, IDs, captions, media links,\nduration, status fields, and count availability details.\n\nThis Actor does not log in, use cookies, scrape private Instagram content,\ncollect comment text, scrape stories, scrape follower lists, or bypass\nInstagram access controls. It only returns data available from public Instagram\ncontent at run time.\n\nWith Instagram Metrics Scraper, you can:\n\n- 📈 Track public Instagram post, reel, carousel, and image performance.\n- 👤 Discover recent public content from Instagram profile URLs and `@handles`.\n- 👀 Collect public views, plays, Instagram plays, likes, and comments when\n  available.\n- 🤝 Capture public owner and collaborator profiles in one clean collaboration\n  field.\n- 🆔 Extract useful IDs such as `postId`, `shortCode`, `profileId`, `fbPostId`,\n  `fbOwnerId`, and `carouselIds`.\n- 🎬 Save captions, publish time, media type, media links, video duration, and\n  audio presence when available.\n- 🎯 Check metric availability instead of treating every blank count as zero.\n- 📦 Export results as JSON, JSONL, CSV, Excel, XML, RSS, or HTML.\n\n## 📦 What Instagram metric data can I extract?\n\nEach dataset row represents one public Instagram content item with at least one\npublic post metric.\n\n| Data group       | Example fields                                                                                 |\n| ---------------- | ---------------------------------------------------------------------------------------------- |\n| 🔗 Source        | `platform`, `inputUrl`, `postUrl`, `status`, `statusReason`, `scrapedAt`                       |\n| 🆔 Post identity | `postId`, `fbPostId`, `shortCode`, `mediaType`, `publishedAt`                                  |\n| 🧾 Post content  | `title`, `caption`, `downloadUrl`, `carouselIds`, `videoDurationSeconds`, `hasAudio`           |\n| 👤 Creator       | `profileId`, `fbOwnerId`, `profileHandle`, `profileUrl`, `profileVerified`, `profileAvatarUrl` |\n| 📊 Metrics       | `views`, `plays`, `playsInstagram`, `likes`, `comments`                                        |\n| 🎯 Count quality | `postMetricStatus`, `profileMetricStatus`                                                      |\n| 🤝 Collaboration | `collaborationCount`, `collaborationProfiles`                                                  |\n\nMetric availability depends on what Instagram exposes publicly for each URL or\nprofile. If a public count is unavailable, the Actor keeps it unavailable\ninstead of filling it with a fake zero.\n\nFor reels and video posts, `views`, `plays`, and `playsInstagram` are kept as\nseparate public counters. Some URLs expose one count but not the others, so\nmissing values stay missing instead of being guessed or mixed.\n\n`collaborationProfiles` contains the public owner and confirmed collaborators\nwhen available. Tagged accounts are not treated as collaborators by default.\n\n## ⚙️ Can I use this Actor through an API?\n\nYes. You can run Instagram Metrics Scraper manually in Apify Console or use it\nthrough:\n\n- Apify API\n- Python SDK\n- Node.js SDK\n- Webhooks\n- Scheduled runs\n- Apify integrations\n\nThis makes it useful for social media dashboards, influencer lists, competitive\nintelligence, creator databases, campaign reporting, data warehouses, and\nautomated market research workflows.\n\n## 🎯 Why scrape Instagram post and reel metrics?\n\nInstagram public metrics help you understand which creators, posts, reels,\ncampaigns, products, and competitors are gaining traction.\n\n| Use case                     | How Instagram metric data helps                                                      |\n| ---------------------------- | ------------------------------------------------------------------------------------ |\n| 📈 Track creator performance | Monitor public engagement across known creator post and reel URLs.                   |\n| 🧑‍🎤 Research influencers      | Compare recent content performance, captions, collaborators, and profile context.    |\n| 📣 Measure campaigns         | Collect repeatable snapshots for campaign posts, reels, and creator deliverables.    |\n| 🕵️ Monitor competitors       | Track public metrics for competing brands, products, and creator accounts.           |\n| 🤝 Audit collaborations      | See public owner and collaborator profiles in a single normalized field.             |\n| 📊 Build reporting workflows | Feed normalized Instagram metrics into dashboards, spreadsheets, APIs, and BI tools. |\n| 🔎 Audit availability        | Separate available, unavailable, blocked, invalid, and failed rows cleanly.          |\n\n## 💵 How much does scraping Instagram metrics cost?\n\nInstagram Metrics Scraper uses Pay Per Event pricing. One billable event is one\nInstagram metric row written to the default dataset.\n\nEvery direct content input is processed by default. Use the optional `maxItems`\nsetting only when you want a total row cap. Use `maxItemsPerProfile` to control\nprofile discovery. Start with a small batch of 3 to 10 URLs when testing a new\nURL list or profile set.\n\n## 🚀 How do I use Instagram Metrics Scraper?\n\n1. Create or log in to your Apify account.\n2. Open **Instagram Metrics Scraper**.\n3. Choose **Auto-detect URLs, handles, and shortcodes**, **Post and reel URLs\n   only**, or **Profile discovery only**.\n4. Paste Instagram post URLs, reel URLs, profile URLs, `@handles`, shortcodes,\n   or a mix of them.\n5. Set an optional total row cap, or leave it blank to process every direct input.\n6. Leave the default settings for your first run.\n7. Click **Start**.\n8. Open the **Output** tab to inspect the dataset and run summary.\n9. Download your data in JSON, JSONL, CSV, Excel, XML, RSS, or HTML.\n\n## ⬇️ Input\n\nThe main input is `startUrls`. Paste at least one Instagram content URL, profile\nURL, `@handle`, or shortcode. `https://` is optional for normal Instagram URLs.\n\nIn **Auto-detect URLs, handles, and shortcodes** mode, you can paste direct\ncontent URLs and profile inputs into the same list. Every direct content input\nis processed unless you set an optional total row cap.\n\n```json\n{\n  \"mode\": \"contentUrls\",\n  \"startUrls\": [\"https://www.instagram.com/reel/DIwcCZgxVZP/\"]\n}\n```\n\n### 🔗 Instagram URLs and handles\n\nSupported input shapes include:\n\n```text\nhttps://www.instagram.com/reel/CODE1234567/\nhttps://www.instagram.com/p/CODE7654321/\nhttps://www.instagram.com/tv/CODE2222222/\nwww.instagram.com/reel/CODE1234567/\nCODE1234567\nhttps://www.instagram.com/mrbeast/\n@mrbeast\n```\n\nUse direct URLs when you need exact known media. Use profile discovery when you\nwant recent public content from a creator, brand, or competitor profile.\n\n### 👤 Profile discovery\n\nUse profile discovery when you want the Actor to find recent public posts and\nreels from an Instagram profile before collecting metrics.\n\n```json\n{\n  \"mode\": \"profileUrls\",\n  \"startUrls\": [\"@mrbeast\"],\n  \"maxItemsPerProfile\": 10\n}\n```\n\nUse `maxItemsPerProfile` to control how many public content URLs are discovered\nfrom each profile input. Set `maxItems` only when you also want an optional cap\nacross the whole run.\n\n### 🎛️ Settings\n\n| Option               | What it does                                                                                       |\n| -------------------- | -------------------------------------------------------------------------------------------------- |\n| `mode`               | `auto` to detect mixed inputs, `contentUrls` for content URLs only, or `profileUrls` for profiles. |\n| `startUrls`          | Instagram content URLs, shortcodes, profile URLs, or `@handles`.                                   |\n| `maxItems`           | Optional total row cap. Leave blank to process every direct content input.                         |\n| `maxItemsPerProfile` | Maximum public content URLs to discover from each profile input.                                   |\n\n## ⬆️ Output sample\n\nThe results are stored in the default dataset. Each result is one Instagram\nmetric row.\n\n```json\n{\n  \"platform\": \"instagram\",\n  \"inputUrl\": \"https://www.instagram.com/reel/CODE1234567/\",\n  \"postUrl\": \"https://www.instagram.com/reel/CODE1234567/\",\n  \"postId\": \"3922329444068919711\",\n  \"fbPostId\": \"18066137273686492\",\n  \"shortCode\": \"CODE1234567\",\n  \"mediaType\": \"reel\",\n  \"title\": null,\n  \"caption\": \"Example campaign reel #launch\",\n  \"publishedAt\": \"2026-06-23T13:00:00.000Z\",\n  \"profileId\": \"123456789\",\n  \"fbOwnerId\": \"17841400000000000\",\n  \"profileHandle\": \"examplebrand\",\n  \"profileUrl\": \"https://www.instagram.com/examplebrand/\",\n  \"profileVerified\": true,\n  \"profileAvatarUrl\": \"https://scontent.cdninstagram.com/avatar.jpg\",\n  \"downloadUrl\": \"https://scontent.cdninstagram.com/example.mp4\",\n  \"carouselIds\": null,\n  \"videoDurationSeconds\": 42.1,\n  \"hasAudio\": true,\n  \"views\": 1234567,\n  \"plays\": 1234999,\n  \"playsInstagram\": 1234888,\n  \"likes\": 23456,\n  \"comments\": 345,\n  \"postMetricStatus\": [\n    {\n      \"metric\": \"views\",\n      \"value\": 1234567,\n      \"status\": \"present\",\n      \"precision\": \"exact\",\n      \"rawValue\": 1234567\n    }\n  ],\n  \"collaborationCount\": 1,\n  \"collaborationProfiles\": [\n    {\n      \"id\": \"123456789\",\n      \"handle\": \"examplebrand\",\n      \"url\": \"https://www.instagram.com/examplebrand/\",\n      \"role\": \"owner\"\n    }\n  ],\n  \"profileMetricStatus\": [\n    {\n      \"metric\": \"profileFollowersCount\",\n      \"value\": null,\n      \"status\": \"unavailable\",\n      \"precision\": \"unavailable\",\n      \"rawValue\": null\n    }\n  ],\n  \"status\": \"ok\",\n  \"statusReason\": null,\n  \"scrapedAt\": \"2026-06-24T15:00:00.000Z\"\n}\n```\n\n`inputUrl` preserves the input that produced the row. `postUrl` is the resolved\npublic Instagram content URL.\n\nWhen a saved row has a missing public metric, that metric is returned as `null`,\nnot `0`. Inputs with no public `views`, `plays`, `playsInstagram`, `likes`, or\n`comments` are reported in `OUTPUT` and are not saved as dataset rows.\n\n## 🎯 Metric status\n\nInstagram can expose exact, rounded, delayed, hidden, or unavailable counters\ndepending on content type and public visibility. The status fields make that\nvisible:\n\n- `present`: the metric was found.\n- `unavailable`: Instagram did not expose the metric publicly for that row.\n- `not_attempted`: the metric was not attempted for that row.\n- `exact`: the public value appeared as a full integer.\n- `display_rounded` or `likely_rounded`: the public value was rounded.\n\nThis lets you filter rows without guessing whether a blank value means zero.\n\n## 👀 Views and plays\n\nFor reels and video posts, the Actor keeps video count families separate:\n\n- `views`\n- `plays`\n- `playsInstagram`\n\nThese fields may differ or appear independently. Keeping them separate makes the\ndataset safer for analytics and prevents one public count from silently filling\nanother.\n\n## 🤝 Collaborations\n\n`collaborationProfiles` contains the public owner and confirmed collaborators\nfor a post when available. Each profile includes:\n\n- `id`\n- `handle`\n- `url`\n- `role`, either `owner` or `collaborator`\n\nTagged accounts are not treated as collaborators by default.\n\n## 🚦 Status values\n\nSaved rows use explicit statuses, and no-metric or failed inputs are summarized\nin `OUTPUT`:\n\n| Status                       | Meaning                                                                                            |\n| ---------------------------- | -------------------------------------------------------------------------------------------------- |\n| `ok`                         | Public content was resolved and at least one useful public metric or metadata field was collected. |\n| `resolved_no_public_metrics` | The input resolved, but public metric fields were not exposed for that item.                       |\n| `invalid_input`              | The input was not a valid Instagram URL, shortcode, or handle.                                     |\n| `unsupported_url`            | The URL is an Instagram surface this Actor does not support.                                       |\n| `blocked_or_challenged`      | Instagram returned a login, challenge, unavailable, or blocked response.                           |\n| `failed`                     | The input could not be resolved after retry.                                                       |\n\nRuns with setup issues, zero discovered profile content, blocked responses, or\nno exposed public post metrics finish with a clear `OUTPUT` summary instead of\nending as failed runs. Check `OUTPUT.stopReason`, `OUTPUT.statusMessage`,\n`OUTPUT.skippedNoPostMetricRows`, and `OUTPUT.validationErrors` when no metric\nrows are saved.\n\n## ⚠️ Notes and limitations\n\n- Public metrics can be hidden, rounded, delayed, or unavailable.\n- Reels and video posts may expose different view and play counters.\n- Image posts and carousels do not always have video-specific metrics.\n- Profile discovery returns recent public content and may return fewer rows than\n  requested.\n- Private, deleted, login-only, age-gated, or restricted content returns status\n  rows instead of private data.\n- Media links can expire or become unavailable after collection.\n- This Actor is not affiliated with Instagram or Meta.\n\n## 🔗 Related social media scrapers\n\nContinue the same workflow on this platform or compare public data across\nplatforms.\n\n### Continue on Instagram\n\n- [Instagram Profile Scraper](https://apify.com/chronometrica/instagram-channel-scraper)\n  — collect public profile details, links, and audience stats.\n- [Instagram Search Scraper](https://apify.com/chronometrica/instagram-search-scraper)\n  — find public Reels and metrics by keyword.\n- [Instagram Comments Scraper](https://apify.com/chronometrica/instagram-comments-scraper)\n  — collect public comments, authors, dates, likes, and reply counts.\n\n### Compare metrics across platforms\n\n- [Facebook Metrics Scraper](https://apify.com/chronometrica/facebook-metrics-scraper)\n  — collect public post, Reel, video, photo, and profile metrics.\n- [TikTok Metrics Scraper](https://apify.com/chronometrica/tiktok-metrics-scraper)\n  — collect public video, profile, engagement, hashtag, and music data.\n- [YouTube Metrics Scraper](https://apify.com/chronometrica/youtube-metrics-scraper)\n  — collect public video, Short, channel, and engagement metrics.\n- [Snapchat Spotlight Metrics Scraper](https://apify.com/chronometrica/snapchat-metrics-scraper)\n  — collect public Spotlight post views, engagement, creator, and media data.\n- [X Post Metrics Scraper](https://apify.com/chronometrica/x-post-metrics)\n  — collect public post views, engagement, media, and author details.\n"
    },
    "buildNumber": "1.0.35",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.06216777777777778
    }
  }
}