{
  "openapi": "3.0.1",
  "info": {
    "title": "Instagram Search Scraper: Reels, Users, Hashtags",
    "description": "Instagram search by keyword, no login: reels, user accounts and hashtags in one run. Reels carry plays, likes, comments and music; accounts carry followers, bio, links and engagement; hashtags carry exact post counts and related tags. Filters, JSON, CSV or API; pay per result.",
    "version": "0.1",
    "x-build-id": "CgVhN8ZU1wvS9FxbD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/automation_craft~instagram-search-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-automation_craft-instagram-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-search-scraper/runs": {
      "post": {
        "operationId": "runs-sync-automation_craft-instagram-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-search-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-automation_craft-instagram-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": {
          "searchTypes": {
            "title": "Search types",
            "type": "array",
            "description": "What to look for on Instagram, one or more of: reels (public reels matching the keyword, with plays, likes and comments), profiles (public accounts matching the keyword, with followers, bio and engagement) and hashtags (hashtags matching the keyword, with their exact post counts). They run one after the other, in the order given; every row carries its searchType. Default: reels.",
            "items": {
              "type": "string",
              "enum": [
                "reels",
                "profiles",
                "hashtags"
              ],
              "enumTitles": [
                "Reels",
                "Profiles (accounts)",
                "Hashtags"
              ]
            },
            "default": [
              "reels"
            ]
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "What to search, one keyword per line (up to 500): a niche, a trade, a brand, a topic or a place (\"nail art\", \"coffee roaster\", \"wedding photographer miami\"). A leading # is dropped. Reels search also takes a link to an instagram.com/popular/ or /explore/tags/ page and Boolean keywords with AND, OR, NOT in capitals, parentheses, \"quoted phrases\" or -word. Profiles search also takes accounts (usernames) and post links (postUrls) instead of keywords.",
            "items": {
              "type": "string"
            }
          },
          "maxResultsPerKeyword": {
            "title": "Max results per keyword",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "The most rows one keyword delivers in each search type: reels (its related searches, variants and creator reels included; Instagram lists about 96 reels a search), profiles (all its searches together, or one post link's commenters) and hashtags (Instagram lists up to 55 hashtags a keyword).",
            "default": 50
          },
          "maxResults": {
            "title": "Max results in the run, per search type",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stops a search type once it delivered this many rows across all keywords (keywords are read in the order given): reels, profiles and hashtags are counted apart. Empty means no run limit."
          },
          "requireKeywordMatch": {
            "title": "Only results that hold every keyword word",
            "type": "boolean",
            "description": "Reels: keep only reels whose caption, hashtags or creator username hold every word of the keyword (Boolean keywords always apply their expression). Profiles: keep only accounts whose username, name or bio hold every word. Hashtags: keep only hashtags whose name holds every word. Rows left out are never charged; every row carries keywordMatch either way.",
            "default": false
          },
          "includeDetails": {
            "title": "Details (reels and profiles)",
            "type": "boolean",
            "description": "On (default): each reel also carries its likes, comments, posting time, length, music, location, collaborators, the paid partnership label and audio link, and each account its followers, following, posts, bio, links, category, account type, recent posts and engagement (billed as a Profile). Off: rows hold only what the search listed (faster; accounts billed as a Basic profile; filters that need details are refused).",
            "default": true
          },
          "sortBy": {
            "title": "Order",
            "enum": [
              "relevance",
              "newest",
              "mostPlayed"
            ],
            "type": "string",
            "description": "Most relevant keeps Instagram's own order for the keyword. Newest first and Most played first list every search of the keyword before delivering, then deliver in that order (newest by the reel's creation time).",
            "default": "relevance"
          },
          "searchRelatedKeywords": {
            "title": "Related searches per keyword",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Also search this many of the related keywords Instagram lists next to your keyword (0 to 10). Their reels are delivered under your keyword with foundVia \"related\". 0 searches only your keyword.",
            "default": 0
          },
          "tryVariantsWhenEmpty": {
            "title": "Try variants for keywords without reels",
            "type": "boolean",
            "description": "Instagram lists no reels for some broad single words (\"coffee\", \"fitness\"). When on, such a keyword is searched again as \"<keyword> ideas\", then \"tips\", then \"inspiration\", and the first that lists reels is read (foundVia \"variant\").",
            "default": false
          },
          "includeCreatorReels": {
            "title": "Add more reels from the creators found",
            "type": "boolean",
            "description": "After a keyword's reels are delivered, read the newest reels of each creator found and add those whose caption, hashtags or username match the keyword (foundVia \"creator\"), up to the number below per creator. Needs the reel details.",
            "default": false
          },
          "maxReelsPerCreator": {
            "title": "Max reels per creator",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "With creator reels on: the most reels added from one creator's newest reels (1 to 12).",
            "default": 2
          },
          "postedSince": {
            "title": "Posted since",
            "type": "string",
            "description": "Keep only reels posted on or after this day (UTC), as 2026-10-01, or in the last N days, as \"30 days\" (counted back from the run's start). Needs the reel details."
          },
          "postedUntil": {
            "title": "Posted until",
            "type": "string",
            "description": "Keep only reels posted on or before this day (UTC), as 2026-10-20. Needs the reel details."
          },
          "minPlays": {
            "title": "Minimum plays",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only reels with at least this many plays."
          },
          "minLikes": {
            "title": "Minimum likes",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only reels with at least this many likes. Reels whose creator hides the like count are left out. Needs the reel details."
          },
          "minComments": {
            "title": "Minimum comments",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only reels with at least this many comments. Needs the reel details."
          },
          "captionLanguages": {
            "title": "Caption languages",
            "type": "array",
            "description": "Keep only reels whose caption is in one of these languages, as estimated from the caption text (a caption is read only with 40 letters or more and a clear result; other reels have no language and are left out). Empty keeps every language.",
            "items": {
              "type": "string",
              "enum": [
                "en",
                "es",
                "pt",
                "fr",
                "de",
                "it",
                "nl",
                "pl",
                "tr",
                "ru",
                "uk",
                "ar",
                "fa",
                "ur",
                "hi",
                "bn",
                "mr",
                "ta",
                "te",
                "gu",
                "kn",
                "ml",
                "pa",
                "ne",
                "id",
                "ms",
                "tl",
                "vi",
                "th",
                "ja",
                "ko",
                "zh",
                "sw",
                "ro",
                "hu",
                "cs",
                "sv",
                "el",
                "bg",
                "sr",
                "hr",
                "az",
                "uz",
                "kk"
              ],
              "enumTitles": [
                "English",
                "Spanish",
                "Portuguese",
                "French",
                "German",
                "Italian",
                "Dutch",
                "Polish",
                "Turkish",
                "Russian",
                "Ukrainian",
                "Arabic",
                "Persian",
                "Urdu",
                "Hindi",
                "Bengali",
                "Marathi",
                "Tamil",
                "Telugu",
                "Gujarati",
                "Kannada",
                "Malayalam",
                "Punjabi",
                "Nepali",
                "Indonesian",
                "Malay",
                "Tagalog",
                "Vietnamese",
                "Thai",
                "Japanese",
                "Korean",
                "Chinese",
                "Swahili",
                "Romanian",
                "Hungarian",
                "Czech",
                "Swedish",
                "Greek",
                "Bulgarian",
                "Serbian",
                "Croatian",
                "Azerbaijani",
                "Uzbek",
                "Kazakh"
              ]
            }
          },
          "includeCreatorDetails": {
            "title": "Creator details (add-on)",
            "type": "boolean",
            "description": "Add each creator's followers, following, post count, category, account type, links and bio to their reels. Billed once per creator per run as a Creator profile event.",
            "default": false
          },
          "maxCommentsPerReel": {
            "title": "Comments per reel (add-on)",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Add up to this many of each reel's public comments (text, time, likes, author) to its row, in the order Instagram shows them. Each comment delivered is billed as one Comment event. 0 adds none.",
            "default": 0
          },
          "includeViewCount": {
            "title": "View count",
            "type": "boolean",
            "description": "Add each reel's view count as its own embed page shows it (viewCount), a separate counter from plays. One more page read per reel, included in the Reel price.",
            "default": false
          },
          "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"
            }
          },
          "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
          },
          "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
          },
          "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."
          },
          "minHashtagPosts": {
            "title": "Min posts of a hashtag",
            "minimum": 0,
            "maximum": 1000000000000,
            "type": "integer",
            "description": "Keep only hashtags used on at least this many posts (the exact count Instagram shows). Empty means no lower bound."
          },
          "maxHashtagPosts": {
            "title": "Max posts of a hashtag",
            "minimum": 0,
            "maximum": 1000000000000,
            "type": "integer",
            "description": "Keep only hashtags used on at most this many posts, for smaller tags where a post is seen longer. Empty means no upper bound."
          },
          "exactHashtagOnly": {
            "title": "Only the exact hashtag (stats of one hashtag)",
            "type": "boolean",
            "description": "Keep only the hashtag whose name is the keyword's words run together (\"coffee roaster\" keeps #coffeeroaster): one row per keyword with that hashtag's exact post count, for the stats of hashtags you already know. A keyword whose exact hashtag Instagram does not list gets no row (free).",
            "default": false
          },
          "includeRelatedHashtags": {
            "title": "Related hashtags and top reels (add-on)",
            "type": "boolean",
            "description": "On: each hashtag row also carries the hashtags used most often with it in its top public reels (relatedHashtags: up to 10, each with how many of those reels use it, and its exact post count and popularity band when Instagram's hashtag search lists it; a count that could not be read is empty) and those reels (topReels: link and plays, with their median plays), read from the hashtag's public popular reels page (one more read per hashtag, and one hashtag search per related hashtag the run does not know yet). Billed as a Related hashtag list per hashtag where at least one related hashtag was found; a hashtag without public reels is free. The reads draw on the run's work allowance for add-ons: when it is spent, the remaining hashtags come without the list (relatedHashtagsStatus allowance, counted in the keyword row and the status message) and are not billed for it. Off (default): not read.",
            "default": false
          },
          "includePersonalData": {
            "title": "Include personal data",
            "type": "boolean",
            "description": "Off (default): the dedicated fields that name or reach a person are empty. Reels: taggedUsers and mentions, and links to Instagram, Facebook, Messenger, Threads or WhatsApp in the creator's website and bio links and in the keyword description's sources. Profiles: 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. Captions, bios and comments are always delivered as Instagram serves them. Hashtag rows hold no personal data. 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}