{
  "openapi": "3.0.1",
  "info": {
    "title": "Instagram Posts, Reels & Comments Scraper [NO LOGIN] ✅",
    "description": "Instagram posts scraper. Get every public post, reel, and carousel from any profile in one run. Optional comments, story highlights, AI transcripts, engagement metrics. No login. Split IG/FB plays. Carousel slides per row. Outcome summary. 99.7% success.",
    "version": "0.0",
    "x-build-id": "llzPmRbLwQFNWHphP"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/unseenuser~IG-posts/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-unseenuser-IG-posts",
        "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/unseenuser~IG-posts/runs": {
      "post": {
        "operationId": "runs-sync-unseenuser-IG-posts",
        "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/unseenuser~IG-posts/run-sync": {
      "post": {
        "operationId": "run-sync-unseenuser-IG-posts",
        "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": {
          "profiles": {
            "title": "Instagram profiles, posts, or reels",
            "uniqueItems": true,
            "type": "array",
            "description": "One entry per target. Mix any of these formats freely - the Actor figures out what to do with each one:\n\nProfile inputs (scrapes every public post + reel from the profile):\n- Handle with or without @:  natgeo, @natgeo\n- Profile URL:               https://www.instagram.com/natgeo/\n- Numeric Instagram user ID: 529823214 (reels only - posts require a handle)\n\nSpecific post or reel URLs (fetches just that one item, one row per URL):\n- Post URL: https://www.instagram.com/p/<shortcode>/\n- Reel URL: https://www.instagram.com/reel/<shortcode>/\n\nQuery params like ?stkn=... or ?img_index=... are stripped automatically. Duplicates are removed. Rows fetched from specific URLs carry _metadata.source_endpoint = \"post_detail\" so you can tell them apart from profile-scraped rows.",
            "items": {
              "type": "string"
            }
          },
          "results_type": {
            "title": "Which content to fetch",
            "enum": [
              "posts",
              "reels",
              "both"
            ],
            "type": "string",
            "description": "Choose whether to fetch posts, reels, or both. Default is 'both'.",
            "default": "both"
          },
          "max_items_per_profile": {
            "title": "Max items per profile (0 = all posts + reels)",
            "minimum": 0,
            "maximum": 15000,
            "type": "integer",
            "description": "Cap on items returned for each profile. Set to 0 (default) to fetch every available post and reel with no cap. Set to a positive number between 1 and 15000 for a bounded sample - useful for testing or when you only need a slice.",
            "default": 0
          },
          "strict_author_match": {
            "title": "Only content owned by the queried profile (drop collabs)",
            "type": "boolean",
            "description": "Enabled by default. Drops rows where the post author does not match the profile you queried, so you never see posts by other creators that Instagram happens to return on the profile's feed (collabs, coauthored posts, tagged content). Disable this if you want the raw feed including collab / coauthored content - each row's author.handle will then be the actual primary author (which may differ from _metadata.input_identifier).",
            "default": true
          },
          "enrich_reel_transcripts": {
            "title": "Enrich reel transcripts",
            "type": "boolean",
            "description": "OPT-IN, disabled by default. If enabled, fetches an AI-generated transcript for each reel under 2 minutes and adds a 'transcript' field to those rows. Only reel-type rows are transcribed (regardless of which feed they arrived on); photos, carousels, standalone video posts, and text-only posts are never sent to the transcript endpoint. Each transcript call takes 10 to 30 seconds, so wall time on profiles with many reels increases significantly. Responses are cached upstream for 7 days, so a reel appearing in both feeds within a single run is only transcribed once. Reels 2 minutes or longer are skipped (the transcript API rejects them). When disabled, output rows are byte-for-byte identical to previous runs.",
            "default": false
          },
          "skip_pinned": {
            "title": "Skip pinned posts",
            "type": "boolean",
            "description": "Drop posts that are pinned to the top of the profile grid. Off by default. Pinned posts can be much older than the rest of the feed and skew time-window analyses, so turn this on when you need results in strict reverse-chronological order without pinned outliers. Only affects the posts feed; reels are unaffected unless a reel was cross-posted and pinned in the posts feed.",
            "default": false
          },
          "tagged_per_profile": {
            "title": "Tagged posts per profile",
            "minimum": 0,
            "maximum": 15000,
            "type": "integer",
            "description": "How many posts from the profile's tagged tab (posts by other creators that tag the queried profile) to also fetch. Set to 0 (default) to skip tagged posts entirely. Set to a positive number to fetch that many; each tagged post becomes its own row with source = 'tagged'. Rows are delivered even when strict_author_match is on (tagged content is by definition not owned by the queried profile). Works transparently on handle inputs — the Actor sniffs the numeric user ID from the first post or reel response.",
            "default": 0
          },
          "comments_per_post": {
            "title": "Comments per post",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "How many public comments to fetch for each delivered post or reel. Set to 0 (default) to skip comments entirely. Positive values fetch up to that many per item; each comment becomes its own row with source = 'comment', linked back via post_shortcode and post_url. Adds one upstream call per delivered item. Typical value: 10.",
            "default": 0
          },
          "replies_per_comment": {
            "title": "Replies per comment",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "How many replies to fetch for each comment. Set to 0 (default) to skip replies. Requires comments_per_post to be greater than 0; otherwise there are no comments to fetch replies against. When on, the Comments API fetches replies inline (upstream flat fee of 15 units per comments request). Each reply becomes its own row with source = 'reply'. Typical value: 10.",
            "default": 0
          },
          "story_highlights": {
            "title": "Fetch story highlight albums",
            "type": "boolean",
            "description": "Off by default. Turn on to also list the profile's permanent story highlight albums. Each album becomes a row with source = 'highlight' carrying its title, cover thumbnail, and owner info. One upstream call per profile. To also fetch the individual stories inside each album, set stories_per_album below.",
            "default": false
          },
          "stories_per_album": {
            "title": "Stories per highlight album",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "How many individual stories to fetch inside each highlight album. Set to 0 (default) to skip — you get one row per album but no rows for the stories inside. Set to a positive number to also fetch that many stories per album (source = 'highlight_item' rows). Requires story_highlights to be on. One upstream call per album.",
            "default": 0
          },
          "include_tagged_posts": {
            "title": "include_tagged_posts (legacy)",
            "type": "boolean",
            "description": "Legacy field kept for existing Tasks; use tagged_per_profile instead.",
            "default": false
          },
          "max_tagged_per_profile": {
            "title": "max_tagged_per_profile (legacy)",
            "minimum": 0,
            "maximum": 15000,
            "type": "integer",
            "description": "Legacy field kept for existing Tasks; use tagged_per_profile instead.",
            "default": 0
          },
          "include_comments": {
            "title": "include_comments (legacy)",
            "type": "boolean",
            "description": "Legacy field kept for existing Tasks; use comments_per_post instead.",
            "default": false
          },
          "max_comments_per_post": {
            "title": "max_comments_per_post (legacy)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Legacy field kept for existing Tasks; use comments_per_post instead.",
            "default": 10
          },
          "include_comment_replies": {
            "title": "include_comment_replies (legacy)",
            "type": "boolean",
            "description": "Legacy field kept for existing Tasks; use replies_per_comment instead.",
            "default": false
          },
          "max_replies_per_comment": {
            "title": "max_replies_per_comment (legacy)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Legacy field kept for existing Tasks; use replies_per_comment instead.",
            "default": 10
          },
          "include_story_highlights": {
            "title": "include_story_highlights (legacy)",
            "type": "boolean",
            "description": "Legacy field kept for existing Tasks; use story_highlights instead.",
            "default": false
          },
          "include_highlight_details": {
            "title": "include_highlight_details (legacy)",
            "type": "boolean",
            "description": "Legacy field kept for existing Tasks; use stories_per_album instead.",
            "default": false
          },
          "max_highlight_items_per_album": {
            "title": "max_highlight_items_per_album (legacy)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Legacy field kept for existing Tasks; use stories_per_album instead.",
            "default": 0
          },
          "include_deltas": {
            "title": "Include historical deltas (change since last run)",
            "type": "boolean",
            "description": "OPT-IN, disabled by default. If enabled, the Actor persists each row's engagement stats to a private named key-value store (one store per Apify account, isolated per account) and, on subsequent runs, adds a stats.deltas object to each row showing the change in views/likes/comments since the last observation of the same shortcode plus hours_since_prior. First run for any shortcode returns no delta - the delta object appears once a prior observation exists. Perfect for trend detection, viral-post alerts, and time-series dashboards. Never affects existing output fields; when this is off, stats.deltas is absent and output rows are byte-for-byte identical to previous runs.",
            "default": false
          },
          "trim": {
            "title": "Return slimmed-down response",
            "type": "boolean",
            "description": "Drop heavy CDN/transcode fields from each row to keep the output lean.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}