{
  "openapi": "3.0.1",
  "info": {
    "title": "Instagram Scraper API — Posts, Comments, Reels, No Login",
    "description": "Scrape Instagram with no login: posts, reels, profiles, hashtags, locations, audio. Plus all public comments (up to ~4,800/post), reel transcripts at $0.004/min, AI summaries, bio emails and Trends. Works in Claude, Cursor and AI agents via MCP. $1.90 per 1,000.",
    "version": "0.2",
    "x-build-id": "e8QX9dCe23uM8tRxa"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yugenox~instagram-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yugenox-instagram-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/yugenox~instagram-scraper/runs": {
      "post": {
        "operationId": "runs-sync-yugenox-instagram-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/yugenox~instagram-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-yugenox-instagram-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": {
          "startUrls": {
            "title": "🔗 Instagram URLs",
            "type": "array",
            "description": "Profiles (https://www.instagram.com/nasa/), reels tabs (/nasa/reels/), hashtags (/explore/tags/travel/), locations (/explore/locations/213131048/), audio (/reels/audio/<id>/), keyword search (/explore/search/keyword/?q=toronto), posts and reels (/p/<code>/), /share/ links, and Instagram's Trends page (https://www.instagram.com/popular/). Bare handles (nasa), #hashtags and numeric user IDs work too.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "🔍 Keywords",
            "type": "array",
            "description": "Search posts by keyword. Each keyword runs its own search.",
            "items": {
              "type": "string"
            }
          },
          "resultsType": {
            "title": "📦 What to scrape",
            "enum": [
              "posts",
              "details",
              "comments"
            ],
            "type": "string",
            "description": "Posts: posts and reels from each source. Details: one row per profile (bio, followers, category, business type, contacts, related accounts, optional Creator Report), hashtag/keyword (topic description, related keywords) or location. Comments: all public comments of each post found (or of the post URLs you give) — no 15-comment cap.",
            "default": "posts"
          },
          "maxItems": {
            "title": "🔢 Max posts",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of posts across the whole run. Leave empty for no limit. Free Apify plans get up to 100 per run."
          },
          "maxItemsPerQuery": {
            "title": "🔢 Max items per URL / keyword",
            "minimum": 1,
            "type": "integer",
            "description": "Cap for each individual profile, hashtag, keyword, location or audio. Leave empty for no per-source limit."
          },
          "until": {
            "title": "📅 Only posts newer than",
            "type": "string",
            "description": "A date (YYYY-MM-DD) or a period like \"7 days\", \"2 weeks\", \"3 months\". On profiles, scraping stops as soon as older posts are reached."
          },
          "skipPinnedPosts": {
            "title": "📌 Skip pinned posts",
            "type": "boolean",
            "description": "Leave out posts pinned to the top of a profile (they are often old).",
            "default": false
          },
          "commentsPerPost": {
            "title": "💬 Latest comments per post",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Attach up to this many of the newest comments (text, author, likes, date) to each post as latestComments. 0 = none. Included in the price.",
            "default": 0
          },
          "includeTranscript": {
            "title": "🗣️ Video transcripts",
            "type": "boolean",
            "description": "Transcribe the speech in every video and reel (any language, up to 15 minutes). Billed per started minute of audio ($0.004/min). Reels set to a licensed song are skipped free.",
            "default": false
          },
          "includeAiSummary": {
            "title": "🤖 Instagram AI title & summary",
            "type": "boolean",
            "description": "Add Instagram's own AI-written title and summary of each post (aiTitle, aiSummary).",
            "default": false
          },
          "includeVideoViews": {
            "title": "👁️ Video view counts",
            "type": "boolean",
            "description": "Add video.viewCount (Instagram's \"views\" metric, which differs from plays). Adds one small request per video.",
            "default": false
          },
          "maxComments": {
            "title": "💬 Max comments per post (comments mode)",
            "minimum": 1,
            "type": "integer",
            "description": "When What to scrape = Comments: how many comments to save per post. Instagram shows every public comment to logged-out visitors, so there is no 15-comment cap — up to about 4,800 per post. With filters, this counts matching comments.",
            "default": 50
          },
          "commentsSort": {
            "title": "↕️ Sort comments",
            "enum": [
              "newest",
              "top"
            ],
            "type": "string",
            "description": "Newest: newest first, as Instagram lists them. Top: the most-liked comments first — scans up to \"Comments to scan\" comments per post and keeps the top ones.",
            "default": "newest"
          },
          "minCommentLikes": {
            "title": "❤️ Min likes per comment",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep comments with at least this many likes."
          },
          "commentKeywords": {
            "title": "🔎 Comment keywords",
            "type": "array",
            "description": "Only keep comments containing any of these words or phrases (case-insensitive). Handy for questions (\"price\", \"where\"), complaints or product mentions.",
            "items": {
              "type": "string"
            }
          },
          "commentsNewerThan": {
            "title": "📅 Comments newer than",
            "type": "string",
            "description": "A date (YYYY-MM-DD) or a period like \"2 days\", \"1 week\". Paging stops at the first older comment, so old threads cost nothing extra."
          },
          "commentsScanLimit": {
            "title": "🔢 Comments to scan per post (sorting and filters)",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "With \"Most liked first\" or a filter, how many comments to read per post while looking for matches. You are only charged for the comments saved.",
            "default": 2000
          },
          "includeDetails": {
            "title": "👤 Add profile / hashtag / place rows",
            "type": "boolean",
            "description": "In Posts mode, also save one details row per profile, hashtag/keyword and location. Rows carry dataType \"profile\" / \"keyword\" / \"place\"; posts carry \"post\".",
            "default": false
          },
          "includeCreatorReport": {
            "title": "📊 Creator Report Card",
            "type": "boolean",
            "description": "Add creatorReport to every profile row: median reel plays, engagement by followers and by views, consistency, posting cadence, format mix, top posts with outlier scores, sponsored share, brand partners and an estimated post price band. Posts by that creator get an outlierScore (plays or likes ÷ the creator's median). Works in Details mode or with \"Add profile rows\". About 3 extra requests per profile. Free for now; it will cost $0.01 per report on top of the profile row, starting 14 days after Apify emails users about the price change. Private profiles, profiles with no posts or reels, and reports that can't be built stay free.",
            "default": false
          },
          "creatorReportComments": {
            "title": "🕵️ Comment authenticity check (posts)",
            "minimum": 0,
            "maximum": 6,
            "type": "integer",
            "description": "Creator Report: also sample the latest comments of this many recent posts (0–6) for engagement-pod signals — repeat commenters across posts, generic comments, comment-to-like ratio. Signals only, not a fake-follower percentage.",
            "default": 0
          },
          "includeRelatedProfiles": {
            "title": "🧭 Related profiles",
            "type": "boolean",
            "description": "Add up to 50 similar accounts Instagram suggests (relatedProfiles) to each profile row.",
            "default": false
          },
          "scrapeRelatedProfiles": {
            "title": "🕸️ Also scrape N related profiles",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "For each profile you give, also scrape up to this many of its related accounts (one level deep). Great for finding similar creators or competitors.",
            "default": 0
          },
          "expandRelatedKeywords": {
            "title": "🔁 Expand hashtags/keywords",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Instagram shows about 60 top posts per hashtag or keyword. Set this to also pull posts from up to N related keywords, for many more results.",
            "default": 0
          },
          "trendSections": {
            "title": "📈 Trends sections",
            "type": "array",
            "description": "For the Trends page input (https://www.instagram.com/popular/): which of Instagram's trend sections to save. Leave empty for all 8 (about 400 ranked keywords and rising profiles, with post counts).",
            "items": {
              "type": "string",
              "enum": [
                "TRENDING_NOW",
                "TRENDING_MONTH",
                "ENTERTAINMENT",
                "CELEBRITIES",
                "BROWSE_CATEGORIES",
                "GET_INSPIRED",
                "LEARN_SOMETHING_NEW",
                "SHOP_THE_TRENDS"
              ],
              "enumTitles": [
                "Trending now",
                "Trending this month",
                "Entertainment",
                "Celebrities (rising profiles)",
                "Browse categories",
                "Get inspired",
                "Learn something new",
                "Shop the trends"
              ]
            }
          },
          "trendPostsPerKeyword": {
            "title": "🔥 Posts per trending keyword",
            "minimum": 0,
            "maximum": 60,
            "type": "integer",
            "description": "Also scrape up to this many top posts for every trending keyword in the selected sections (0 = trend rows only). Posts carry source.type \"trend\" with the keyword and section.",
            "default": 0
          },
          "minFollowers": {
            "title": "Min followers",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep posts / profiles whose owner has at least this many followers."
          },
          "maxFollowers": {
            "title": "Max followers",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep posts / profiles whose owner has at most this many followers."
          },
          "verifiedOnly": {
            "title": "Verified accounts only",
            "type": "boolean",
            "description": "Only keep posts / profiles from verified accounts.",
            "default": false
          },
          "businessOnly": {
            "title": "Business & creator accounts only",
            "type": "boolean",
            "description": "Profile rows only: keep business and creator accounts.",
            "default": false
          },
          "withContactOnly": {
            "title": "Only profiles with contact info",
            "type": "boolean",
            "description": "Profile rows only: keep profiles that list an email or phone number in their bio.",
            "default": false
          },
          "minLikes": {
            "title": "Min likes (posts)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep posts with at least this many likes. Posts with hidden like counts are skipped."
          },
          "minPlays": {
            "title": "Min plays (videos)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep videos and reels with at least this many plays. Photos, and videos without a public play count (including a pinned reel from months back, see the run report), are skipped."
          },
          "videosOnly": {
            "title": "Videos and reels only",
            "type": "boolean",
            "description": "Only keep posts that are videos or reels: photos and carousels are skipped and not charged, and the run report names them. For one profile's videos, its /reels/ URL (e.g. https://www.instagram.com/nasa/reels/) is faster than filtering its whole grid.",
            "default": false
          },
          "minOutlierScore": {
            "title": "Min outlier score",
            "minimum": 0,
            "type": "number",
            "description": "Only keep posts that beat the creator's own median by this factor (e.g. 3 = three times their typical plays or likes). Needs the Creator Report Card, and applies to posts of profiles you scrape with profile rows on."
          },
          "monitor": {
            "title": "🛰️ Monitor mode (only new posts)",
            "type": "boolean",
            "description": "For scheduled runs: remember what earlier runs saved and return only new posts and comments, plus follower / bio changes on profile rows and rank changes on trend rows. Items already seen are skipped and not charged. State is kept in a key-value store in your own Apify account.",
            "default": false
          },
          "monitorKey": {
            "title": "Monitor name",
            "type": "string",
            "description": "Names this watchlist's memory (letters, digits and dashes). Use a different name for each schedule you monitor. Default: \"default\"."
          },
          "customMapFunction": {
            "title": "🧩 Custom map function",
            "type": "string",
            "description": "Temporarily disabled for security review: the function is accepted but not run, and items are saved unmodified (a warning is logged). Optional JavaScript function that transforms each post, e.g. (item) => ({ ...item, username: item.owner?.username }). For transformation only, not filtering. If the function is unusable, it is ignored with a warning and original posts are saved."
          },
          "maxConcurrency": {
            "title": "⚡ Parallel requests",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many requests run in parallel. Higher is faster.",
            "default": 20
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy",
            "type": "object",
            "description": "Apify datacenter proxy works well and is the default. Blocked IPs are rotated automatically, with a residential fallback.",
            "default": {
              "useApifyProxy": true
            }
          },
          "getStories": {
            "title": "📖 Get stories",
            "type": "boolean",
            "description": "Stories are only visible to logged-in Instagram accounts, so they are not available in this scraper. Accepted for input compatibility; no charge.",
            "default": false
          },
          "handles": {
            "title": "Story handles",
            "type": "array",
            "description": "Accepted for input compatibility (see Get stories).",
            "items": {
              "type": "string"
            }
          },
          "userIds": {
            "title": "User IDs",
            "type": "array",
            "description": "Numeric Instagram user IDs to scrape as profiles. (Also the stories input, which is not available.)",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}