{
  "openapi": "3.0.1",
  "info": {
    "title": "Contact Details Scraper",
    "description": "Free email extractor and lead scraper to extract and download emails, phone numbers, Facebook, Twitter, LinkedIn, Instagram, Threads, Snapchat, and Telegram profiles from any website. Extract contact information at scale from lists of URLs and download the data as Excel, CSV, JSON, HTML, and XML.",
    "version": "0.2",
    "x-build-id": "MHe1GAaKVA0aeX9x3"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/vdrmota~contact-info-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-vdrmota-contact-info-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/vdrmota~contact-info-scraper/runs": {
      "post": {
        "operationId": "runs-sync-vdrmota-contact-info-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/vdrmota~contact-info-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-vdrmota-contact-info-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": [
          "startUrls",
          "proxyConfig"
        ],
        "properties": {
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "The list of web pages from which the scraper will start crawling.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxRequestsPerStartUrl": {
            "title": "Maximum pages per start URL",
            "minimum": 1,
            "type": "integer",
            "description": "The maximum number of pages that will be enqueued from each start URL you provide."
          },
          "mergeContacts": {
            "title": "Merge contacts",
            "type": "boolean",
            "description": "Enable this option to merge all contacts and social media from every page of the same start URL into a single, clean result row.",
            "default": true
          },
          "maxDepth": {
            "title": "Maximum link depth",
            "minimum": 0,
            "type": "integer",
            "description": "The maximum number of links away from the <b>Start URLs</b> that the actor will crawl. If <code>0</code>, the scraper will not follow any links. If empty or null, the scraper will follow links to an arbitrary depth."
          },
          "maxRequests": {
            "title": "Maximum pages for whole scrape",
            "minimum": 1,
            "type": "integer",
            "description": "The maximum number of pages the scraper will load. It is always a good idea to limit the number of pages, otherwise the scraper might run infinitely or consume too many resources."
          },
          "sameDomain": {
            "title": "Stay within domain",
            "type": "boolean",
            "description": "If set, the scraper will only follow links within the same domain as the referring page.",
            "default": true
          },
          "considerChildFrames": {
            "title": "Probe frames",
            "type": "boolean",
            "description": "If set, the scraper will also extract contact information from iframes. You might not always want this (e.g. it will include data from online ads).",
            "default": true
          },
          "maximumLeadsEnrichmentRecords": {
            "title": "⏩ Add-on: Extract business leads information - Maximum leads per domain ($)",
            "type": "integer",
            "description": "Enrich your results with detailed contact and company information, including employee names, job titles, emails, phone numbers, LinkedIn profiles, and key company data like industry and number of employees. <br><br> This setting allows you to set the maximum number of leads records you want to scrape per each domain found. By default, it's set to 0 which means that no leads information will be scraped. <br><br>⚠️ Note that some of the fields contain <b>personal data</b>. GDPR protects personal data in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your use case is legitimate, please consult an attorney. <br><br>To keep your leads relevant, we automatically filter out large chains and online platforms (e.g., social media, retail giants, food delivery services). <br><br>⚠️ <b>Cost warning:</b> This is a multiplier. Requesting 10 leads for 1,000 domains will attempt to find 10,000 total leads. You are only charged for leads successfully found.",
            "default": 0
          },
          "leadsEnrichmentDepartments": {
            "title": "Leads departments selection",
            "type": "array",
            "description": "You can use this filter to include only specific departments (like Sales, Marketing, or C-Suite). Note: This will only work if the ⏩ Add-on: Extract business leads information - Maximum leads per domain (maximumLeadsEnrichmentRecords) option is enabled. Please note that some job titles are sometimes miscategorized in the wrong departments.",
            "items": {
              "type": "string",
              "enum": [
                "c_suite",
                "product",
                "engineering_technical",
                "design",
                "education",
                "finance",
                "human_resources",
                "information_technology",
                "legal",
                "marketing",
                "medical_health",
                "operations",
                "sales",
                "consulting"
              ],
              "enumTitles": [
                "C-Suite",
                "Product",
                "Engineering & Technical",
                "Design",
                "Education",
                "Finance",
                "Human Resources",
                "Information Technology",
                "Legal",
                "Marketing",
                "Medical & Health",
                "Operations",
                "Sales",
                "Consulting"
              ]
            }
          },
          "scrapeSocialMediaProfiles": {
            "title": "🔍 Add-on: Social media profile enrichment ($)",
            "type": "object",
            "description": "Enable enrichment for any social media profiles found. This add-on retrieves detailed public data for each profile, including <b>profile names, follower/following counts, descriptions, post/video counts, and verification status</b>.<br><br>Pricing depends on your <b>subscription plan</b> (please see the 'Pricing' tab for details). You are charged a flat rate for the <b>total number of profiles enriched</b>, regardless of how many platforms (Facebook, Instagram, etc.) you select.<hr><b>Feature Dependency:</b><br>To use this feature, the <b>'Merge contacts'</b> option will be automatically enabled. This ensures that all enriched social media data is correctly combined with the main contact record for each domain.<br><br><b>Output:</b> Enriched profiles are available in the <b>Social profiles</b> output view tab.",
            "properties": {
              "facebooks": {
                "title": "Enable Facebook profile scraping",
                "type": "boolean",
                "description": "Enable scraping detailed Facebook profile information for discovered Facebook URLs. This will provide additional data like follower counts, profile pictures, and more."
              },
              "instagrams": {
                "title": "Enable Instagram profile scraping",
                "type": "boolean",
                "description": "Enable scraping detailed Instagram profile information for discovered Instagram URLs. This will provide additional data like follower counts, profile pictures, and more."
              },
              "youtubes": {
                "title": "Enable YouTube channel scraping",
                "type": "boolean",
                "description": "Enable scraping detailed YouTube channel information for discovered YouTube URLs. This will provide additional data like subscriber counts, channel descriptions, and more."
              },
              "tiktoks": {
                "title": "Enable TikTok profile scraping",
                "type": "boolean",
                "description": "Enable scraping detailed TikTok profile information for discovered TikTok URLs. This will provide additional data like follower counts, profile pictures, and more."
              },
              "twitters": {
                "title": "Enable X (Twitter) profile scraping",
                "type": "boolean",
                "description": "Enable scraping detailed Twitter profile information for discovered X (Twitter) URLs. This will provide additional data like follower counts, profile pictures, and more."
              }
            },
            "default": {
              "facebooks": false,
              "instagrams": false,
              "youtubes": false,
              "tiktoks": false,
              "twitters": false
            }
          },
          "useBrowser": {
            "title": "Use Browser for scraping",
            "type": "boolean",
            "description": "If set, the scraper will use a browser for crawling the pages.",
            "default": false
          },
          "waitUntil": {
            "title": "Consider page to be loaded",
            "enum": [
              "commit",
              "domcontentloaded",
              "load",
              "networkidle"
            ],
            "type": "string",
            "description": "Select when a page should be considered loaded so that the actor can start scraping it. *Only works with the browser.*",
            "default": "domcontentloaded"
          },
          "proxyConfig": {
            "title": "Proxy",
            "type": "object",
            "description": "Proxy servers let you bypass website protections, avoid IP address blocking, and view content for other countries. Try to use a proxy if you are experiencing timeout errors.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}