{
  "openapi": "3.0.1",
  "info": {
    "title": "Instagram Profile Scraper - Followers, Bio & Engagement",
    "description": "Scrape public Instagram profiles in bulk by username, URL or user id: followers, following and posts count, bio and bio links, category, business flags, related profiles, emails and phones in the bio. Optional latest posts with engagement rate. Monitor mode tracks follower and post deltas. No login.",
    "version": "0.1",
    "x-build-id": "tO6xtZEyIemFJPG5u"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/topapi~instagram-profile-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-topapi-instagram-profile-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/topapi~instagram-profile-scraper/runs": {
      "post": {
        "operationId": "runs-sync-topapi-instagram-profile-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/topapi~instagram-profile-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-topapi-instagram-profile-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": "👤 Profiles",
            "type": "array",
            "description": "Instagram usernames, profile URLs or user ids, e.g. \"nasa\", \"@natgeo\", \"https://www.instagram.com/nike/\", \"528817151\". Duplicates are read once. Post and reel URLs are not profiles and are skipped.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "📄 Profile URLs from a file",
            "type": "array",
            "description": "Optional: upload a text/CSV file or link a remote list of profile URLs (one per line), e.g. an export from a CRM. Merged with the list above.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "minFollowers": {
            "title": "👥 Minimum followers",
            "minimum": 0,
            "maximum": 2000000000,
            "type": "integer",
            "description": "Keep only accounts with at least this many followers, e.g. 10000 for micro-influencers and up. 0 = no minimum.",
            "default": 0
          },
          "maxFollowers": {
            "title": "👥 Maximum followers",
            "minimum": 0,
            "maximum": 2000000000,
            "type": "integer",
            "description": "Keep only accounts with at most this many followers, e.g. 100000 to leave out celebrities. 0 = no maximum.",
            "default": 0
          },
          "accountType": {
            "title": "🏷️ Account type",
            "enum": [
              "any",
              "professional",
              "business",
              "creator",
              "personal"
            ],
            "type": "string",
            "description": "Keep only one kind of account, as Instagram classifies it (accountType in the output).",
            "default": "any"
          },
          "verifiedOnly": {
            "title": "✅ Verified accounts only",
            "type": "boolean",
            "description": "Keep only accounts with the blue verified badge.",
            "default": false
          },
          "excludePrivate": {
            "title": "🔒 Public accounts only",
            "type": "boolean",
            "description": "Leave out private accounts. Private accounts otherwise come back with their public header (counts, name, bio) and status \"private\".",
            "default": false
          },
          "requireContact": {
            "title": "📇 Must have a contact",
            "enum": [
              "none",
              "website",
              "email",
              "phone",
              "emailOrPhone",
              "any"
            ],
            "type": "string",
            "description": "Keep only accounts that publish a way to reach them. Emails and phones are read from the bio text and link-in-bio (WhatsApp, tel:, mailto:) links.",
            "default": "none"
          },
          "bioKeywords": {
            "title": "🔤 Bio keywords",
            "type": "string",
            "description": "Keep only accounts whose bio, name, username, category or bio links contain one of these words, comma-separated and case-insensitive, e.g. \"bakery, cafe, coffee\".",
            "default": ""
          },
          "activeWithinDays": {
            "title": "📅 Posted within the last N days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep only accounts whose newest post is at most this many days old, e.g. 30 to drop dormant accounts. 0 = no check. Private accounts have no visible posts and are dropped when this is set.",
            "default": 0
          },
          "includeLatestPosts": {
            "title": "📸 Latest posts + engagement rate",
            "type": "boolean",
            "description": "Adds the account's latest posts (up to 12: caption, likes, comments, views, date, media URL, location, tagged users) plus avgLikes, avgComments, avgVideoViews, engagementRate and postsPerWeek. Charged as the latest-posts event once per profile that gets posts.",
            "default": false
          },
          "monitorMode": {
            "title": "🔁 Track changes between runs",
            "type": "boolean",
            "description": "Remembers each profile (in the named key-value store below) and adds changeType (NEW / UPDATED / UNCHANGED), followersDelta, followsDelta, postsDelta, followersGrowthPct and changedFields (bio, name, links, category, verified, private, account type, new posts) to every row.",
            "default": false
          },
          "monitorStoreName": {
            "title": "🗄️ Monitor memory name",
            "pattern": "^[a-zA-Z0-9-]{1,63}$",
            "type": "string",
            "description": "Name of the key-value store that keeps the per-profile snapshots. Give each watchlist (a client, a campaign) its own name. Letters, digits and hyphens.",
            "default": "instagram-profiles-monitor"
          },
          "monitorOnlyChanges": {
            "title": "🔔 Only changed profiles",
            "type": "boolean",
            "description": "With tracking on, deliver only profiles that are new to the list or changed: bio, name, links, category, verified/private status, a new post, or followers moved by 1% or more since the profile was last delivered. A run where nothing changed delivers nothing.",
            "default": false
          },
          "maxResults": {
            "title": "💯 Max profiles",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Cap on delivered profiles (after your filters) - your main cost control. 0 = every profile in the list. There is no Instagram-side limit on how many profiles one run can look up.",
            "default": 0
          },
          "includeUnavailable": {
            "title": "🚫 Include unavailable profiles",
            "type": "boolean",
            "description": "Also write a free status row (status not_found / blocked / error, with the reason) for every input that returned no profile, so the output lines up 1:1 with your list.",
            "default": false
          },
          "compact": {
            "title": "🤖 Compact output",
            "type": "boolean",
            "description": "Core fields only (id, username, name, bio, website, followers, following, posts, verified, private, account type, category, emails, phones, last post date, engagement and change fields when on): small rows sized for AI agents and MCP clients.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "🌍 Proxy",
            "type": "object",
            "description": "Apify datacenter proxies serve this actor (measured). It keeps each working proxy session busy, rotates away from an IP Instagram refuses, and falls back to residential proxies only if the datacenter group keeps being refused.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "⚡ Parallel profiles",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many profiles are read at once. 4 is a safe default; 6-8 suits lists of thousands.",
            "default": 4
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}