{
  "openapi": "3.0.1",
  "info": {
    "title": "Instagram Profile Scraper: Followers, Bio, Posts",
    "description": "Scrape Instagram profiles by username or user id, no login: exact followers, following and post count, bio and links, account type, category, HD picture and the newest posts with likes and engagement. Filters, related accounts, Page contact. JSON, CSV or API; pay per profile.",
    "version": "0.1",
    "x-build-id": "CXOsJpYDmCIFLWluw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/automation_craft~instagram-profile-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-automation_craft-instagram-profile-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/automation_craft~instagram-profile-scraper/runs": {
      "post": {
        "operationId": "runs-sync-automation_craft-instagram-profile-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/automation_craft~instagram-profile-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-automation_craft-instagram-profile-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "usernames": {
            "title": "Instagram accounts",
            "type": "array",
            "description": "Instagram accounts to read (up to 5,000): usernames, @handles, profile links (instagram.com/<username>/) or numeric user ids. Each account gives one profile row. An account Instagram does not show to a logged out reader (not found, renamed, deleted) is free, and its position in this list is named on the account list row.",
            "items": {
              "type": "string"
            }
          },
          "maxProfiles": {
            "title": "Max profiles in the run",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stops the run once this many profiles were delivered (accounts are read in the order given). Empty means every account in the list."
          },
          "includeRecentPosts": {
            "title": "Recent posts on the row",
            "type": "boolean",
            "description": "Adds the account's 6 newest posts (link, date, likes, comments, caption, pinned, paid partnership, place) to its row. Engagement figures are computed from them either way.",
            "default": true
          },
          "includeLatestPosts": {
            "title": "Latest 12 posts on the row",
            "type": "boolean",
            "description": "Adds the account's 12 newest posts as its grid shows them, pinned posts first (latestPosts): link, type, reel flag, date, caption, likes, comments, picture, place, paid partnership and carousel size. Up to 13 more reads per account (the grid, and one read per post the 6 newest do not cover), no extra charge.",
            "default": false
          },
          "latestPostsSince": {
            "title": "Latest posts since",
            "type": "string",
            "description": "With includeLatestPosts: keeps only the latest posts posted on or after this day, as a date (2026-10-01, read as 00:00 UTC) or a number of days back from the run's start (\"30 days\"). Empty keeps all 12."
          },
          "includeReelStats": {
            "title": "Reel figures",
            "type": "boolean",
            "description": "Reads the account's 12 newest reels: median, average and highest play count and the newest reel's date (reelStats). One more read per account, no extra charge.",
            "default": false
          },
          "includeRelatedProfiles": {
            "title": "Suggested accounts on the row",
            "type": "boolean",
            "description": "Adds the accounts Instagram suggests next to each profile (relatedProfiles; often none logged out). These name other accounts, so they need includePersonalData. One more read per account, no extra charge.",
            "default": false
          },
          "includeFacebookPageContact": {
            "title": "Facebook Page contact (paid add-on)",
            "type": "boolean",
            "description": "Reads the public contact of the Facebook Page the account links: the Page Instagram links to it, else the one Page Meta's Ad Library search (by the username, then the name) names with this account as its Instagram account. E-mail, phone, WhatsApp, website, address, hours. Charged as one Facebook Page contact only when the Page shows an e-mail, a phone or WhatsApp number, a website, an address or its hours; no Page, no exact match or none of those is free.",
            "default": false
          },
          "expandWithRelatedProfiles": {
            "title": "Add suggested accounts",
            "type": "boolean",
            "description": "Also delivers the accounts Instagram suggests next to the profiles of your list, each as a profile row of its own (charged as a Profile), marked with the profile it was suggested next to (relatedTo). Logged out, Instagram suggests accounts for about a third of the profiles. One more read per profile.",
            "default": false
          },
          "expansionDepth": {
            "title": "Expansion levels",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "With expandWithRelatedProfiles: 1 adds the accounts suggested next to your list, 2 also those suggested next to them, and so on up to 10. maxRelatedProfiles caps the accounts added in all."
          },
          "maxRelatedProfiles": {
            "title": "Max accounts added by the expansion",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "With expandWithRelatedProfiles: stops the expansion once this many suggested accounts were delivered (default 50)."
          },
          "maxRelatedPerAccount": {
            "title": "Max accounts taken from each profile",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "With expandWithRelatedProfiles: takes at most this many of the accounts Instagram suggests next to each profile, in Instagram's order, at every level (default 50, all of them; Instagram suggests at most 50)."
          },
          "minFollowers": {
            "title": "Min followers",
            "minimum": 0,
            "type": "integer",
            "description": "Leave out accounts with fewer followers."
          },
          "maxFollowers": {
            "title": "Max followers",
            "minimum": 0,
            "type": "integer",
            "description": "Leave out accounts with more followers."
          },
          "minPosts": {
            "title": "Min posts",
            "minimum": 0,
            "type": "integer",
            "description": "Leave out accounts with fewer posts (private accounts show no post count and are left out by this filter)."
          },
          "maxPosts": {
            "title": "Max posts",
            "minimum": 0,
            "type": "integer",
            "description": "Leave out accounts with more posts."
          },
          "verified": {
            "title": "Verified accounts",
            "enum": [
              "any",
              "only",
              "exclude"
            ],
            "type": "string",
            "description": "Any account (default), verified accounts only, or unverified accounts only.",
            "default": "any"
          },
          "accountTypes": {
            "title": "Account types",
            "type": "array",
            "description": "Keep only these account types (empty keeps every type). Professional means business or creator.",
            "items": {
              "type": "string",
              "enum": [
                "personal",
                "business",
                "creator",
                "professional"
              ],
              "enumTitles": [
                "Personal",
                "Business",
                "Creator",
                "Professional (business or creator)"
              ]
            }
          },
          "influencersOnly": {
            "title": "Influencers only",
            "type": "boolean",
            "description": "Keep only creator accounts and accounts whose category is one of a list of people who publish for an audience (Digital creator, Video creator, Blogger, Public figure, Artist, Musician, Athlete, model, Writer, Photographer, Gamer, Chef, Coach and more; README \"Filters\").",
            "default": false
          },
          "includePrivate": {
            "title": "Include private accounts",
            "type": "boolean",
            "description": "Private accounts show their name, bio and counts but no posts. Off leaves them out (free).",
            "default": true
          },
          "onlyPrivate": {
            "title": "Private accounts only",
            "type": "boolean",
            "description": "Keep only private accounts (their header and counts); public accounts are left out free.",
            "default": false
          },
          "mustContain": {
            "title": "Must contain any of",
            "type": "array",
            "description": "Keep only accounts that hold at least one of these words or phrases (whole words, any case; a word of four letters or more also counts inside the username) in the part mustContainIn names.",
            "items": {
              "type": "string"
            }
          },
          "mustContainIn": {
            "title": "Where the words must be",
            "enum": [
              "bio_or_name",
              "bio",
              "name",
              "posts",
              "anywhere"
            ],
            "type": "string",
            "description": "Where mustContain looks: the username, name and bio (default), the bio only, the username and name only, the captions of the 6 recent posts, or anywhere.",
            "default": "bio_or_name"
          },
          "excludeWords": {
            "title": "Leave out accounts with any of",
            "type": "array",
            "description": "Leave out accounts whose username, name or bio holds any of these words or phrases.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Keep only accounts whose Instagram category holds one of these words (\"photographer\", \"coffee shop\"). Accounts without a category are left out.",
            "items": {
              "type": "string"
            }
          },
          "combineCategoryAndWords": {
            "title": "Categories and words together",
            "enum": [
              "and",
              "or"
            ],
            "type": "string",
            "description": "When both categories and mustContain are set: an account must pass both (default), or either one.",
            "default": "and"
          },
          "languages": {
            "title": "Languages",
            "type": "array",
            "description": "Keep only accounts whose bio and recent captions read as one of these languages (two letter codes such as en, es, de; our own estimate, accounts we cannot tell are left out).",
            "items": {
              "type": "string"
            }
          },
          "contactFilter": {
            "title": "Contact shown",
            "enum": [
              "any",
              "emailOrPhone",
              "email",
              "phone",
              "emailAndPhone"
            ],
            "type": "string",
            "description": "Keep only accounts that show this contact in their bio, bio links or recent captions: any account (default), an e-mail or a phone, an e-mail, a phone, or both. The addresses and numbers themselves are delivered with includePersonalData.",
            "default": "any"
          },
          "requireWebsite": {
            "title": "Has a website",
            "type": "boolean",
            "description": "Keep only accounts with a website or another link in their bio.",
            "default": false
          },
          "minEngagementRate": {
            "title": "Min engagement rate (percent)",
            "minimum": 0,
            "type": "number",
            "description": "Keep only accounts whose engagement rate (average likes and comments of their 6 newest posts over followers, in percent) is at least this. Accounts without visible likes are left out."
          },
          "activeWithinDays": {
            "title": "Posted within days",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep only accounts whose newest post (pinned posts aside) is at most this many days old."
          },
          "minRecentPosts": {
            "title": "Min posts in the period",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "Keep only accounts with at least this many of their 6 newest posts inside the last recentPostsDays days (1 to 6)."
          },
          "recentPostsDays": {
            "title": "Period for min posts (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "The period minRecentPosts counts in, in days back from the run's start (default 30).",
            "default": 30
          },
          "minMedianReelPlays": {
            "title": "Min median reel plays",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only accounts whose 12 newest reels have at least this median play count. Needs includeReelStats."
          },
          "reelPostedWithinDays": {
            "title": "Reel posted within days",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep only accounts whose newest reel is at most this many days old. Needs includeReelStats."
          },
          "minPlaysToFollowersPercent": {
            "title": "Min reel plays to followers (percent)",
            "minimum": 0,
            "type": "number",
            "description": "Keep only accounts whose median reel play count is at least this percent of their followers. Needs includeReelStats."
          },
          "maxPlaysToFollowersPercent": {
            "title": "Max reel plays to followers (percent)",
            "minimum": 0,
            "type": "number",
            "description": "Leave out accounts whose median reel play count is above this percent of their followers (one viral reel). Needs includeReelStats."
          },
          "excludeUsernames": {
            "title": "Accounts to leave out",
            "type": "array",
            "description": "Accounts never to deliver (usernames, @handles, profile links or ids), for example accounts an earlier run already gave you (up to 10,000). They are left out free.",
            "items": {
              "type": "string"
            }
          },
          "includeLeftOutAccounts": {
            "title": "Rows for accounts left out",
            "type": "boolean",
            "description": "Adds a free row for every account read and left out (its username and the reason: a filter, not shown logged out, already delivered), so you see why an account is missing.",
            "default": false
          },
          "minMatchRatePercent": {
            "title": "Stop when few accounts pass (percent)",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Stops the run when, after 100 accounts were judged, fewer than this percent of them passed your filters (a list that does not fit the filters). Empty never stops."
          },
          "refilterDatasetId": {
            "title": "Filter an earlier run again",
            "type": "string",
            "description": "The dataset id of an earlier run of this Actor: its profile rows are judged again by this run's filters and the ones that pass are delivered without reading Instagram (charged as a Re-filtered profile). Can run alone or beside usernames."
          },
          "includePersonalData": {
            "title": "Include personal data",
            "type": "boolean",
            "description": "Off (default): fields that name or reach a person are empty: emails and phones (from the bio, bio links, captions), relatedProfiles, bioMentions, collaborators of the latest posts, Instagram's redirect link, and Meta profile links and contact links (any app link such as mailto, tel, sms, callto, tg; messaging services such as Telegram, Signal, Viber, Skype) in the website and bio links. On: filled. Bios and captions are delivered as served. You answer for a lawful use, GDPR included.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Accounts read at the same time",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "How many accounts are read in parallel (1 to 4, default 4). Fewer is slower and gentler.",
            "default": 4
          },
          "maxRunSeconds": {
            "title": "Max run time (seconds)",
            "minimum": 30,
            "maximum": 86400,
            "type": "integer",
            "description": "Stops the run after this many seconds; the account list row names the accounts not reached. Empty means the platform timeout."
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "How long one request may take before it is retried.",
            "default": 30
          },
          "maxRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "How often a failed request is retried on a fresh connection.",
            "default": 2
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Default: Apify Proxy without a group or country, which reads from the run's own address first and moves a request type to Apify's datacenter proxy when it is refused there. Choose a group or a country to read only through Apify Proxy, or give your own proxy links. A residential group is read through the datacenter pool instead (no extra cost).",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}