{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Contact Extractor: Emails, Phones & Social Links",
    "description": "Get emails, phone numbers and social links (LinkedIn, Facebook, Instagram, X, YouTube, TikTok) from websites or a Google Maps dataset. Reads the home, contact and Impressum pages, normalizes phones to E.164, finds contact pages and forms. One row per site. Pay per page read.",
    "version": "0.1",
    "x-build-id": "mf9yY8tm4ztStDVdx"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/humble-echidna~website-contact-extractor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-humble-echidna-website-contact-extractor",
        "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/humble-echidna~website-contact-extractor/runs": {
      "post": {
        "operationId": "runs-sync-humble-echidna-website-contact-extractor",
        "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/humble-echidna~website-contact-extractor/run-sync": {
      "post": {
        "operationId": "run-sync-humble-echidna-website-contact-extractor",
        "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": {
          "urls": {
            "title": "Website URLs",
            "type": "array",
            "description": "The websites to read, one per line: a full address (https://www.example.com/) or just a domain (example.com, which means its https:// home page). A deeper address (https://example.com/locations/denver) starts there. Each website gives one row with its emails, phone numbers and social profiles. The same site typed twice is read once. Ignored when datasetId is set.",
            "default": [
              "https://wikimediafoundation.org/"
            ],
            "items": {
              "type": "string"
            }
          },
          "datasetId": {
            "title": "Or: websites from a dataset (e.g. Google Maps leads)",
            "type": "string",
            "description": "One of your Apify datasets, picked here or by id, e.g. a Google Maps scraper's results: each item's website is read (urls is ignored). Items without a website and Google Maps links are skipped; a website shared by several items is read once. Rows carry sourceTitle, sourcePlaceId, sourceIndex and any keepFields; a Maps item's countryCode sets its phone country. Started by an integration with this empty: the finished run's dataset. Up to 20,000 items, read-only."
          },
          "datasetUrlField": {
            "title": "Field with the website (dataset)",
            "type": "string",
            "description": "Only with datasetId: the item field that holds the website, e.g. `website`, or a dotted path such as `contact.website`. Leave empty (the default) to find it automatically: the first of website, url, domain, site and homepage that has a website in the first 100 items, then the same names one level down (contact.website)."
          },
          "keepFields": {
            "title": "Fields to keep from the dataset",
            "type": "array",
            "description": "Only with datasetId: more fields of each dataset item to copy into its row, e.g. `address`, `phone`, `categoryName` from a Google Maps scraper (dotted paths like `contact.city` work too). Each comes out as source + its name, so `address` becomes `sourceAddress` and `contact.city` becomes `sourceContactCity`. Up to 20 fields; empty (the default) keeps only sourceTitle, sourcePlaceId and sourceIndex.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxPagesPerSite": {
            "title": "Max pages per website",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "The most pages read on one website, the start page included, e.g. 5 (the default). Only pages likely to hold contact details are read after the start page: contact and legal-notice (Impressum) pages first, then about, team and location pages, then privacy and support pages. A site with fewer such pages is read in fewer. Each page read is one charged page. 1 to 20.",
            "default": 5
          },
          "defaultCountry": {
            "title": "Country for local phone numbers",
            "type": "string",
            "description": "Optional two-letter country code (US, GB, DE, FR, AU...) for phone numbers written without their country code, like (303) 555-0142 or 040 864171. Leave empty (the default) to use, in order: a Google Maps item's countryCode, the website's country domain (.de, .co.uk), the page's own language tag (en-GB), else the United States. Numbers written with + and their country code are always read as written."
          },
          "onePerEmail": {
            "title": "One row per email address",
            "type": "boolean",
            "description": "Off (the default): one row per website, with every email in `emails`. On: one row per email address found, each with email, emailPageUrl (where it was found), emailOnSiteDomain and emailIsRole (info@, sales@...) plus the website's other fields, for mailing tools and email verifiers. Websites without an email give no row in this mode. The price is the same: pages are charged, rows are free.",
            "default": false
          },
          "maxResults": {
            "title": "Max websites per run",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many websites in total, e.g. 100. Leave empty (the default) for no limit. The run also stops cleanly at the maximum cost per run you set in the run options: no page is fetched that it can't pay for."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}