{
  "openapi": "3.0.1",
  "info": {
    "title": "Instagram Profile Phone & Contact Scraper",
    "description": "Instagram Profile Phone Number Scraper collects phone contact data to support audience research and outreach. Analyze niches, regions, or trends while identifying direct contact points efficiently.",
    "version": "1.0",
    "x-build-id": "V48OfH8SMve4R9uyV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/simpleapi~instagram-profile-phone-number-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-simpleapi-instagram-profile-phone-number-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/simpleapi~instagram-profile-phone-number-scraper/runs": {
      "post": {
        "operationId": "runs-sync-simpleapi-instagram-profile-phone-number-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/simpleapi~instagram-profile-phone-number-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-simpleapi-instagram-profile-phone-number-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": [
          "profiles"
        ],
        "properties": {
          "profiles": {
            "title": "👤 Profiles to enrich (usernames / URLs / IDs)",
            "type": "array",
            "description": "The list you want to enrich. Accepts plain usernames (natgeo), @handles (@natgeo), profile URLs (https://instagram.com/natgeo), post/reel URLs (https://instagram.com/p/CXXXX/ — the owner is resolved and enriched), and numeric user IDs. Duplicates are removed case-insensitively. Example: [\"natgeo\", \"@nike\", \"https://instagram.com/p/C123abcD/\"].",
            "items": {
              "type": "string"
            }
          },
          "unwrapLinkInBio": {
            "title": "🌳 Unwrap link-in-bio pages",
            "type": "boolean",
            "description": "When a profile's external URL or a bio link points to a link aggregator (Linktree, Beacons, Stan.store, Carrd, Koji, Milkshake, Taplink, and similar), fetch that page and one hop of its destination links and scan them for phones, emails and social handles. Results appear in linkInBioContacts + pagesScanned. Default is true.",
            "default": true
          },
          "maxLinkInBioPages": {
            "title": "📄 Max link-in-bio pages per profile",
            "minimum": 0,
            "maximum": 25,
            "type": "integer",
            "description": "Upper bound on how many pages the unwrapper fetches per profile (the aggregator page first, then its destination links). Keeps runs bounded. Example: 5. Default is 5.",
            "default": 5
          },
          "linkInBioTimeoutSec": {
            "title": "⏱️ Link-in-bio timeout per page (seconds)",
            "minimum": 3,
            "maximum": 60,
            "type": "integer",
            "description": "Per-page fetch timeout while unwrapping link-in-bio pages. Slow pages are skipped (they contribute no contacts). Example: 15. Default is 15.",
            "default": 15
          },
          "linkInBioTotalBudgetSec": {
            "title": "⏳ Link-in-bio total time budget per profile (seconds)",
            "minimum": 0,
            "maximum": 300,
            "type": "integer",
            "description": "Overall wall-clock budget for unwrapping ONE profile's link-in-bio pages. When reached, unwrapping stops gracefully and pagesScanned reflects what was fetched. 0 = auto (derived from page count × per-page timeout). Example: 45. Default is auto.",
            "default": 0
          },
          "country": {
            "title": "🌍 Default phone region (optional)",
            "enum": [
              "United Kingdom (+44)",
              "United States (+1)",
              "Canada (+1)",
              "Australia (+61)",
              "Ireland (+353)",
              "India (+91)",
              "United Arab Emirates (+971)",
              "Germany (+49)",
              "France (+33)",
              "Spain (+34)",
              "Italy (+39)",
              "Netherlands (+31)",
              "Portugal (+351)",
              "Brazil (+55)",
              "Mexico (+52)",
              "Nigeria (+234)",
              "South Africa (+27)",
              "Kenya (+254)",
              "Singapore (+65)",
              "Philippines (+63)",
              "Indonesia (+62)",
              "Malaysia (+60)",
              "Saudi Arabia (+966)",
              "Turkey (+90)",
              "Poland (+48)",
              "Sweden (+46)",
              "Switzerland (+41)",
              "New Zealand (+64)",
              "Argentina (+54)",
              "Colombia (+57)"
            ],
            "type": "string",
            "description": "Used ONLY to parse local phone numbers that have no international (+) prefix into E.164 (for example, a UK bio number written as 020 7946 0000). Numbers already in +international form are parsed regardless. Example: United Kingdom (+44)."
          },
          "hasPhoneOnly": {
            "title": "📞 Only leads with a phone",
            "type": "boolean",
            "description": "Emit only profiles that have a business phone, a valid phone from the bio, a WhatsApp number, or a phone found while unwrapping link-in-bio. Default is false.",
            "default": false
          },
          "hasEmailOnly": {
            "title": "📧 Only leads with an email",
            "type": "boolean",
            "description": "Emit only profiles that have a business email, an email in the bio, or an email found while unwrapping link-in-bio. Default is false.",
            "default": false
          },
          "businessOnly": {
            "title": "🏢 Only business accounts",
            "type": "boolean",
            "description": "Emit only profiles where is_business_account is true. Default is false.",
            "default": false
          },
          "verifiedOnly": {
            "title": "✅ Only verified accounts",
            "type": "boolean",
            "description": "Emit only verified (blue-tick) profiles. Default is false.",
            "default": false
          },
          "minFollowers": {
            "title": "👥 Minimum followers",
            "minimum": 0,
            "type": "integer",
            "description": "Emit only profiles with at least this many followers. 0 = no minimum. Default is 0.",
            "default": 0
          },
          "concurrency": {
            "title": "⚡ Concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Profiles enriched in parallel (each on a fresh proxy IP + fresh Chrome TLS client). Keep conservative to avoid Instagram rate limits. Default is 2.",
            "default": 2
          },
          "maxRetries": {
            "title": "🔁 Max retries",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many times to retry fetching a profile before recording an error row. Default is 3.",
            "default": 3
          },
          "delayMs": {
            "title": "⏳ Delay between requests (ms)",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Base delay used for per-profile jitter and retry back-off. Default is 2000.",
            "default": 2000
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy configuration",
            "type": "object",
            "description": "Proxy for the enrichment + link-in-bio requests. RESIDENTIAL is strongly recommended — Instagram blocks most datacenter IPs. A fresh IP is used per profile."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}