{
  "openapi": "3.0.1",
  "info": {
    "title": "Instagram Post Scraper - Tagged Places & Coordinates",
    "description": "Instagram Post Scraper extracts posts with tagged places and coordinates, including captions, usernames, timestamps, engagement metrics, media URLs, location names, and geographic data. Ideal for location-based research, audience insights, competitor analysis, and social media intelligence.",
    "version": "0.1",
    "x-build-id": "2iH8sPqTqemSxD7W8"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapio~instagram-post-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapio-instagram-post-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/scrapio~instagram-post-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapio-instagram-post-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/scrapio~instagram-post-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapio-instagram-post-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",
        "required": [
          "username"
        ],
        "properties": {
          "username": {
            "title": "🌍 Instagram profiles or post URLs to map",
            "type": "array",
            "description": "Usernames (dametraveler), profile URLs (https://www.instagram.com/dametraveler/) or single post / reel / tv URLs (https://www.instagram.com/p/SHORTCODE/). Travel, hospitality and destination accounts carry the most geotags; news and tech accounts often carry none.",
            "items": {
              "type": "string"
            }
          },
          "resultsLimit": {
            "title": "🔢 Rows to return per profile",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "How many post rows to save per profile. This is the number of rows you get back, not the number of posts scanned - see the scan ceiling below when you turn a place filter on. Ignored for single post URLs. Default is 10.",
            "default": 10
          },
          "onlyPostsNewerThan": {
            "title": "📆 Only posts published after",
            "type": "string",
            "description": "Cutoff in UTC. Absolute tab takes a YYYY-MM-DD date or a full ISO timestamp; Relative tab takes '6 hours', '3 days', '1 week', '2 months', '3 years'. An unreadable value stops the run instead of silently disabling the filter. Leave empty for no cutoff.",
            "default": null
          },
          "skipPinnedPosts": {
            "title": "📌 Drop posts pinned to the grid",
            "type": "boolean",
            "description": "Skip the posts the creator pinned to the top of their profile. Pinned status is checked against the profile you are scraping, so a collaboration post that is pinned on the co-author's grid is kept.",
            "default": false
          },
          "dataDetailLevel": {
            "title": "🧭 How much post data per row",
            "enum": [
              "detailedData",
              "basicData"
            ],
            "type": "string",
            "description": "Detailed adds alt text, the latest comments, music info and paid-partnership status by loading each post page - about one extra request per post (roughly 2.8s vs 6.2s per 12 posts). Both levels cost exactly one result row each; detailed is slower, not more expensive. Place and coordinate fields are returned on both levels.",
            "default": "detailedData"
          },
          "onlyPostsWithLocation": {
            "title": "📍 Keep only posts that have a tagged place",
            "type": "boolean",
            "description": "Off by default on purpose: whether a creator geotags is entirely up to them. Measured on 2026-07-25 - dametraveler 36/36, beautifuldestinations 33/36, expertvagabond 33/36, voyaged 16/36, lonelyplanet 11/36, mkbhd 1/36, natgeo 0/36. Turning this on for a non-travel account can legitimately return zero rows.",
            "default": false
          },
          "locationKeywords": {
            "title": "🔎 Only these places",
            "type": "array",
            "description": "Case-insensitive substring match against the place name, short name, slug, address, city and category. Example: ['Paris', 'Bali', 'Hotel']. Leave empty to keep every place. Posts with no tagged place never match.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "geoBoundingBox": {
            "title": "🧮 Only inside this map box",
            "type": "string",
            "description": "Four numbers, 'minLat,minLng,maxLat,maxLng'. Example: '40.47,-74.30,40.95,-73.68' for New York City. Tested against the coordinates Instagram returned - never against a name or a geocoded guess. Posts with a place but no coordinates cannot be tested, so they are excluded and counted separately in the log.",
            "default": ""
          },
          "maxPostsToScan": {
            "title": "🔭 Scan ceiling per profile",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Upper bound on posts read per profile while looking for rows that pass the filters. Only matters when a place filter is on: with a filter, the run keeps paging until it has enough rows or hits this ceiling. 300 posts is about 25 feed requests. Default is 300.",
            "default": 300
          },
          "enrichPlaceDetails": {
            "title": "🏷️ Look up Instagram's place record",
            "type": "boolean",
            "description": "Adds the place category, its total Instagram post count, its slug, its canonical coordinates and an address/city backfill. One request per DISTINCT place, cached for the whole run - measured 103 lookups behind 130 geotagged posts, so about 0.79 requests per geotagged post. Turn off for the fastest possible run.",
            "default": true
          },
          "maxPlaceLookups": {
            "title": "💸 Cap place lookups per run",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Hard ceiling on distinct place lookups. Rows past the cap still get every field that rides on the post itself and are marked locationPlaceRecordStatus = recordUnavailable. 0 means no cap. Default is 0.",
            "default": 0
          },
          "emitPlacesDataset": {
            "title": "📊 Also write a one-row-per-place dataset",
            "type": "boolean",
            "description": "Writes a second dataset named 'places' with one deduplicated row per distinct place plus postsInThisRun. Handy for mapping tools that want places rather than posts. These rows are reference data and are not charged as results.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy",
            "type": "object",
            "description": "Instagram's post feed was reachable through Apify RESIDENTIAL, through the BUYPROXIES94952 datacenter group and from an unproxied IP on 2026-07-25, so residential is a reliability preference here rather than a hard requirement. Residential is the default.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}