{
  "openapi": "3.0.1",
  "info": {
    "title": "Instagram User Search Scraper: Profiles by Keyword",
    "description": "Instagram user search by keyword, no login: accounts from Threads' user search, Meta's Ad Library and Instagram's reel creators for each niche, trade or place. Rows carry followers, posts, bio, links, category, engagement and the linked Facebook Page; 24 filters. JSON, CSV or API; pay per profile.",
    "version": "0.1",
    "x-build-id": "u7w76V0kTGcwD8cKA"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/automation_craft~instagram-user-search-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-automation_craft-instagram-user-search-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-user-search-scraper/runs": {
      "post": {
        "operationId": "runs-sync-automation_craft-instagram-user-search-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-user-search-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-automation_craft-instagram-user-search-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": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Words or phrases to find Instagram accounts by, one per line (up to 500): a niche, a trade, a brand or a place (\"coffee roaster\", \"wedding photographer miami\", \"vegan bakery\"). Each keyword is searched on Threads' user search (accounts whose name or username matches), Meta's Ad Library search (businesses with a Facebook Page) and Instagram's reels search (creators of matching reels). A leading # is dropped. Put accounts in usernames and post links in postUrls.",
            "items": {
              "type": "string"
            }
          },
          "usernames": {
            "title": "Usernames",
            "type": "array",
            "description": "Instagram accounts to read directly (up to 5,000): usernames, @handles, profile links (instagram.com/<username>/) or numeric account ids. Each one gives its own profile row; an account Instagram does not show logged out gets a free note on the account list row.",
            "items": {
              "type": "string"
            }
          },
          "postUrls": {
            "title": "Post or reel links (commenters)",
            "type": "array",
            "description": "Instagram post or reel links (up to 100). The authors of each post's public comments are read as profiles, with commentsOnPost (how many of the comments read they wrote). Likers are not public logged out.",
            "items": {
              "type": "string"
            }
          },
          "maxProfilesPerKeyword": {
            "title": "Max profiles per keyword",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "The most profiles delivered for one keyword (all its searches together) or one post link. Threads lists about 100 accounts a search, the Ad Library up to 15 and the reels search the creators of 24 reels a page; variants and suggested accounts find more.",
            "default": 50
          },
          "maxProfiles": {
            "title": "Max profiles in the run",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stops the run once this many profiles were delivered across all keywords, accounts and posts (read in the order given). Empty means no run limit."
          },
          "maxCommentersPerPost": {
            "title": "Max commenters read per post",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "For post links: the most distinct comment authors collected from one post before their profiles are read (about 15 comments a call).",
            "default": 50
          },
          "searchThreads": {
            "title": "Search Threads accounts",
            "type": "boolean",
            "description": "Threads' user search: accounts whose name or username matches the keyword (about 100 a search). Finds accounts that use Threads; their Threads username is their Instagram username.",
            "default": true
          },
          "searchAdLibrary": {
            "title": "Search Meta Ad Library (businesses)",
            "type": "boolean",
            "description": "Meta's Ad Library search: Facebook Pages matching the keyword that link an Instagram account (up to 15 a search), with the Page's id, category, likes and country on the row.",
            "default": true
          },
          "adLibraryCountry": {
            "title": "Ad Library country",
            "type": "string",
            "description": "The country the Ad Library search favours: ALL (default) or a two letter code in capitals such as US, GB or DE (local Pages come first).",
            "default": "ALL"
          },
          "searchReelCreators": {
            "title": "Search reel creators",
            "type": "boolean",
            "description": "Instagram's popular reels search for the keyword: the creators of its matching reels (24 on the first page; more with Reel search pages), accounts that post about the keyword. Broad single words list no reels.",
            "default": true
          },
          "reelSearchPages": {
            "title": "Reel search pages",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many pages of Instagram's popular reels search to read for the reel creators: the first page lists 24 reels, each next one about 50, about 96 reels a search in all. One search call a page; more pages find more creators.",
            "default": 1
          },
          "searchVariants": {
            "title": "Search name variants",
            "type": "boolean",
            "description": "For a keyword of several words, also search Threads for its joined, underscored and dotted forms (\"coffeeroaster\", \"coffee_roaster\", \"coffee.roaster\"), which find accounts named that way (32 to 134 more accounts on six keywords measured). Three more searches a keyword.",
            "default": false
          },
          "expandWithRelatedProfiles": {
            "title": "Add suggested accounts",
            "type": "boolean",
            "description": "Read the accounts Instagram suggests next to each profile delivered for a keyword, a username list or a post link and deliver them too (foundVia related_profile, expansionLevel 1 or 2), up to that entry's cap (for a username list, Max profiles per keyword counts its suggested accounts). Logged out Instagram suggests accounts for about 13 of 100 profiles (67 of 500 measured).",
            "default": false
          },
          "expansionDepth": {
            "title": "Suggested accounts levels",
            "minimum": 1,
            "maximum": 2,
            "type": "integer",
            "description": "With Suggested accounts on: 1 expands the profiles your keywords, usernames or post links delivered; 2 also expands the suggested accounts the first level delivered. Accounts found at the last level are not expanded.",
            "default": 1
          },
          "includeDetails": {
            "title": "Account details",
            "type": "boolean",
            "description": "On (default): every account is read on Instagram (followers, following, posts, bio, links, category, account type, recent posts, engagement) and billed as a Profile. Off: rows hold only what the search showed (username, name, verified flag; followers and the Facebook Page for Ad Library finds) and are billed as a Basic profile; filters that need details are refused.",
            "default": true
          },
          "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
          },
          "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
          },
          "includeProfileInfo": {
            "title": "Profile info (business address, joined recently)",
            "type": "boolean",
            "description": "Reads Instagram's profile info for each account: the business address (street, city, zip, coordinates) where the account shows one, the contact method, and whether it joined recently. One more read per account, no extra charge; Instagram limits this read hard and answers it for about a quarter of the accounts (profileInfoStatus says when it did not).",
            "default": false
          },
          "includeFacebookPageContact": {
            "title": "Facebook Page contact (paid add-on)",
            "type": "boolean",
            "description": "For accounts that link a Facebook Page, reads the Page's public contact details (e-mail, phone, WhatsApp, website, address, hours, price range, services). 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; a Page that shows only a price range, services or ratings is free.",
            "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
          },
          "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
          },
          "requireKeywordMatch": {
            "title": "Every keyword word in the account",
            "type": "boolean",
            "description": "Keep only accounts whose username, name or bio holds every word of the keyword (keywordMatch \"all\"). The searches match names loosely: for \"real estate agent miami\" 8 of the 118 readable accounts found carried every word.",
            "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"
            }
          },
          "locationMustContain": {
            "title": "Place words",
            "type": "array",
            "description": "Keep only accounts that name one of these places in their bio, their business address (with includeProfileInfo) or their Facebook Page country.",
            "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 the accounts an earlier run already gave you (up to 10,000).",
            "items": {
              "type": "string"
            }
          },
          "minMatchRatePercent": {
            "title": "Stop when few accounts pass (percent)",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "After 100 accounts were read in the run, stop it when fewer than this percent of them passed your filters, so strict filters cannot read on for long. Empty never stops on this."
          },
          "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 readable logged out, already delivered), so you see why an account is missing.",
            "default": false
          },
          "refilterDatasetId": {
            "title": "Filter an earlier run again",
            "type": "string",
            "description": "The dataset id of an earlier run of this Actor (its Storage tab). Its profile rows are checked again with this run's filters and the ones that pass are delivered, without reading Instagram, each as a Re-filtered profile."
          },
          "includePersonalData": {
            "title": "Include personal data",
            "type": "boolean",
            "description": "Off (default): the dedicated fields that name or reach a person are empty: emails and phones (read from the bio, bio links and recent captions), relatedProfiles, and links to Instagram, Facebook, Messenger, Threads or WhatsApp and contact links (mailto, tel, sms, callto, Telegram, Signal, Viber, Skype) in the website and bio links. On: they are filled. Bios and captions are always delivered as Instagram serves them. You are responsible for a lawful use of personal data, GDPR included.",
            "default": false
          },
          "maxRunSeconds": {
            "title": "Max run time (seconds)",
            "minimum": 30,
            "maximum": 86400,
            "type": "integer",
            "description": "Stops the run after this many seconds, with a row for each entry not finished. 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}