{
  "openapi": "3.0.1",
  "info": {
    "title": "Instagram API Scraper: Engagement Rate Per Follower",
    "description": "Instagram API Scraper extracts profiles, posts, reels, comments, followers, hashtags, and other Instagram data through an automated API workflow. Collect structured social media data for market research, competitor analysis, lead generation, and analytics.",
    "version": "0.1",
    "x-build-id": "ZFOzJyRDtRgKTinYg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/api-empire~instagram-api-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-api-empire-instagram-api-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/api-empire~instagram-api-scraper/runs": {
      "post": {
        "operationId": "runs-sync-api-empire-instagram-api-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/api-empire~instagram-api-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-api-empire-instagram-api-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": {
          "accountsToAnalyse": {
            "title": "📊 Accounts to analyse",
            "type": "array",
            "description": "✨ Instagram profiles, posts or reels to measure. Bare usernames work.\n• 👤 `humansofny` or `https://www.instagram.com/humansofny/`\n• 📷 `https://www.instagram.com/p/<shortcode>/`\n• 🎬 `https://www.instagram.com/reel/<shortcode>/`\n\nEngagement rate is calculated per account, so profile URLs give the richest output.",
            "items": {
              "type": "string"
            }
          },
          "computeEngagementRate": {
            "title": "📈 Work out engagement rate",
            "type": "boolean",
            "description": "Adds `engagementRate` to every post using the industry-standard formula **(likes + comments) ÷ followers × 100**, expressed as a percentage.\nExample: 4,200 likes + 130 comments on a 120,000-follower account → `engagementRate` = 3.6083 (%). Turn off to skip the maths and the follower lookup entirely. Default: on.",
            "default": true
          },
          "postsToAverage": {
            "title": "🔢 Posts to average",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "How many of the newest posts per account feed the `AccountSummary` rollup row (`avgEngagementRate`, `avgLikes`, `avgComments`).\nThe rollup always publishes `postsAnalysed` beside the averages so you can see the real sample size. Example: 12 → averages over the 12 newest scraped posts. Default: 12.",
            "default": 12
          },
          "minEngagementRate": {
            "title": "🎯 Minimum engagement rate (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only keep posts whose `engagementRate` reaches this percentage. Example: 3 keeps posts at 3% or better and drops the rest.\n⚠️ Posts whose follower count could not be recovered have a null rate and are also dropped while this is above 0. Leave at 0 (default) to keep everything.",
            "default": 0
          },
          "fetchFollowerCounts": {
            "title": "🪪 Fetch follower counts",
            "type": "boolean",
            "description": "Looks each account up once per run to recover **exact** `followersCount`, `followsCount`, `postsCount`, `biography`, `externalUrl` (unwrapped from Instagram's `l.instagram.com` redirect), `isVerifiedAccount` and `isPrivateAccount` — fields the original actor left permanently null.\nOne request per account, not per post. Default: on.",
            "default": true
          },
          "profileFetchTimeout": {
            "title": "🌐 Profile fetch timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "How long to wait for a single profile lookup before giving up on it. On timeout the posts are still returned, with `engagementRate` null and an uncharged accounting row explaining why. Default: 25 seconds.",
            "default": 25
          },
          "directUrls": {
            "title": "🔗 Legacy URL list (compatibility)",
            "type": "array",
            "description": "Accepted for backwards compatibility with the original Instagram API Scraper input. Anything here is **merged with** 📊 Accounts to analyse above (de-duplicated) — neither field overrides the other, so existing saved inputs keep working unchanged.",
            "items": {
              "type": "string"
            }
          },
          "resultsType": {
            "title": "🎯 What to scrape",
            "enum": [
              "posts",
              "comments",
              "details",
              "mentions",
              "reels",
              "stories"
            ],
            "type": "string",
            "description": "Choose the output type for each URL above.\n• 📷 **posts** — recent posts from a profile / hashtag / single post\n• 💬 **comments** — public comments under a post or reel\n• 🪪 **details** — profile or post metadata only\n• 🔖 **mentions** — extract `@mentions` from posts, or list hashtag posts\n• 🎬 **reels** — reels feed from a profile\n• 📖 **stories** — story-side fetch (best-effort, public only)",
            "default": "posts"
          },
          "resultsLimit": {
            "title": "🔢 Max results per URL",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum items to return for each URL. Note: Instagram's own pagination stops somewhere near 2,400 items per profile, so values far above that will not return more.",
            "default": 10
          },
          "onlyPostsNewerThan": {
            "title": "📅 Only items newer than",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month|year)s?$",
            "type": "string",
            "description": "📆 Limit how far back to scrape. Pick an absolute date (`YYYY-MM-DD`) or a relative window (`7 days`, `2 months`, `3 years`). Only items posted on or after this cutoff are returned. Leave empty for no filter. All times are UTC."
          },
          "addParentData": {
            "title": "🧷 Attach parent (source) metadata",
            "type": "boolean",
            "description": "If enabled, each result item also includes a `parentData` field with the source profile/hashtag info.",
            "default": false
          },
          "search": {
            "title": "🔎 Search query (optional)",
            "type": "string",
            "description": "Run an Instagram search instead of (or in addition to) URLs. Leave empty to disable search.",
            "default": ""
          },
          "searchType": {
            "title": "🔍 Search type",
            "enum": [
              "user",
              "hashtag",
              "place"
            ],
            "type": "string",
            "description": "What the search query targets.",
            "default": "hashtag"
          },
          "searchLimit": {
            "title": "🔢 Search results limit",
            "minimum": 1,
            "maximum": 250,
            "type": "integer",
            "description": "Number of search results to return (1–250).",
            "default": 1
          },
          "proxyConfiguration": {
            "title": "🛡️ Proxy configuration",
            "type": "object",
            "description": "🌐 Default: **no proxy** — the actor talks to Instagram directly.\nIf Instagram rejects or blocks requests, the actor automatically escalates: 🔁 datacenter proxy → 🏠 residential proxy (3 retries). Once it falls back to residential, it sticks with residential for the rest of the run.\nYou can override the default by enabling Apify Proxy below.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}