{
  "openapi": "3.0.1",
  "info": {
    "title": "Instagram Scraper - Profiles, Posts, Reels, Hashtags, Places",
    "description": "Gets 200 posts per account past Instagram's 12-post limit: 200 unique posts in 4 requests, zero repeats. Scrape Instagram profile data and Instagram reel play counts with no login. An empty run names one of 10 reasons instead of a silent empty table.",
    "version": "0.1",
    "x-build-id": "bLfjRKcqeGGMJikfu"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/snow_leo_data~instagram-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-snow_leo_data-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/snow_leo_data~instagram-scraper/runs": {
      "post": {
        "operationId": "runs-sync-snow_leo_data-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/snow_leo_data~instagram-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-snow_leo_data-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": {
          "usernames": {
            "title": "👤 Instagram accounts",
            "type": "array",
            "description": "Usernames or profile URLs: nasa, @nasa, https://www.instagram.com/nasa/. Each one returns a profile row plus as many of its posts as you ask for below.",
            "default": [
              "nasa"
            ],
            "items": {
              "type": "string"
            }
          },
          "postsPerProfile": {
            "title": "🔢 Posts per account",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "How many posts and reels to return for every account. Posts come from Instagram's own logged-out feed, 50 per request, page after page — measured 200 posts over four requests with no repeats, reaching five months back. 0 returns profile rows only.",
            "default": 12
          },
          "includeProfiles": {
            "title": "Include the profile row",
            "type": "boolean",
            "description": "Followers, following, post count, bio, bio links, verified and private flags for every account in the list.",
            "default": true
          },
          "postUrls": {
            "title": "🔗 Single posts and reels",
            "type": "array",
            "description": "Post or reel URLs (https://www.instagram.com/p/XXXX/ or /reel/XXXX/), or bare shortcodes. These are read from the post page, which also carries the place, the tagged users and the reel's music.",
            "items": {
              "type": "string"
            }
          },
          "hashtags": {
            "title": "#️⃣ Hashtags",
            "type": "array",
            "description": "Hashtags without the # sign. Instagram serves its logged-out hashtag page for part of its tags only: of five tags measured on 17.09.2026, travel and nature returned 12 posts each, while nasa, food and photography answered with the login wall. Tags that are closed are named in the run report instead of failing the run.",
            "items": {
              "type": "string"
            }
          },
          "includeHashtagPosts": {
            "title": "Include the posts of a hashtag",
            "type": "boolean",
            "description": "On top of the hashtag row itself (volume, description, related keywords), return the 12 posts Instagram shows on that page.",
            "default": true
          },
          "locationUrls": {
            "title": "📍 Places",
            "type": "array",
            "description": "Location URLs (https://www.instagram.com/explore/locations/212988663/new-york-new-york/) or bare location ids. One place page returns 18 posts with full engagement data.",
            "items": {
              "type": "string"
            }
          },
          "includeRelatedAccounts": {
            "title": "Keep posts of related accounts",
            "type": "boolean",
            "description": "Instagram's logged-out feed mixes in posts of accounts tagged in, or co-authoring with, the one you asked for: measured 131 posts of @nasa inside 200 returned. Off by default, so you get only the account you asked for.",
            "default": false
          },
          "includeReelPlays": {
            "title": "Add play counts for recent reels",
            "type": "boolean",
            "description": "Fetches the account's reels tab, the only logged-out page that carries play_count, and fills the plays column for the reels found there (up to 12 per account). One extra page per account.",
            "default": false
          },
          "includePostDetails": {
            "title": "Open every post for place, music and photo tags",
            "type": "boolean",
            "description": "Opens the page of each post to add the place with coordinates, the reel's music, the users tagged inside the photo and Instagram's topic pills. This is one page per post (about 150 KB) against 4.7 KB per post in the feed, so it is charged as a separate event.",
            "default": false
          },
          "onlyNew": {
            "title": "🔁 Watch mode: only what changed",
            "type": "boolean",
            "description": "Remembers what earlier runs delivered and returns only new and updated items, each marked NEW or UPDATED in change_type. A run that finds nothing new returns an empty dataset and says so in the report.",
            "default": false
          },
          "emitUnchanged": {
            "title": "Return unchanged items too",
            "type": "boolean",
            "description": "In watch mode, also return items that did not change, marked UNCHANGED.",
            "default": false
          },
          "maxItems": {
            "title": "🧾 Maximum rows",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on rows written to the dataset — and only on rows written, never on the crawl. With filters on, the crawl goes deeper than this number so the filters do not empty your table. Empty means 50, which keeps a trial run cheap.",
            "default": 50
          },
          "minLikes": {
            "title": "Minimum likes",
            "minimum": 0,
            "type": "integer",
            "description": "Drops posts below this many likes. Posts whose owner hides like counts arrive with likes = null and are kept, because missing data is not a mismatch."
          },
          "minComments": {
            "title": "Minimum comments",
            "minimum": 0,
            "type": "integer",
            "description": "Drops posts below this many comments. Posts where Instagram hides the count are kept."
          },
          "minFollowers": {
            "title": "Minimum followers",
            "minimum": 0,
            "type": "integer",
            "description": "Applies to profile rows only; post rows pass through untouched."
          },
          "postedAfter": {
            "title": "Posted after",
            "type": "string",
            "description": "YYYY-MM-DD. The feed is walked newest first, so this also stops the crawl instead of only filtering it — that is your money saved, not just your table shortened."
          },
          "postedBefore": {
            "title": "Posted before",
            "type": "string",
            "description": "YYYY-MM-DD."
          },
          "captionContains": {
            "title": "Caption contains",
            "type": "string",
            "description": "Case-insensitive substring of the caption. Posts with no caption at all are dropped by this filter."
          },
          "postTypes": {
            "title": "Post types",
            "type": "array",
            "description": "Leave empty for everything.",
            "items": {
              "type": "string",
              "enum": [
                "image",
                "video",
                "carousel",
                "reel"
              ],
              "enumTitles": [
                "Photo",
                "Video",
                "Carousel (multiple photos)",
                "Reel"
              ]
            },
            "default": []
          },
          "compactOutput": {
            "title": "Compact table",
            "type": "boolean",
            "description": "18 columns instead of the full set — for AI agents and spreadsheets.",
            "default": false
          },
          "excludeEmptyFields": {
            "title": "Drop empty fields",
            "type": "boolean",
            "description": "Leaves out null, empty list and false values from every row.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy",
            "type": "object",
            "description": "Instagram blocks Apify's own cloud addresses by name: measured 17.09.2026, a direct profile request from the cloud returns 200 and 499 KB with not a single field in it, while the same page through a residential address returns the real data. Residential is therefore the default. Pages are requested with gzip, which puts one profile page at about 144 KB on the wire instead of 719 KB.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}