{
  "openapi": "3.0.1",
  "info": {
    "title": "Email Scraper",
    "description": "A lightweight Apify Actor that crawls websites and extracts email addresses using HTTP requests. It bypasses Cloudflare protection, RTL obfuscation, and text patterns to deliver structured data fast. Features include configurable crawl depth, proxy support, and anti-detection measures.",
    "version": "1.2",
    "x-build-id": "NaAKx1V9pLozVcDRZ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dominic-quaiser~email-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dominic-quaiser-email-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/dominic-quaiser~email-scraper/runs": {
      "post": {
        "operationId": "runs-sync-dominic-quaiser-email-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/dominic-quaiser~email-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-dominic-quaiser-email-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": [
          "start_urls"
        ],
        "properties": {
          "start_urls": {
            "title": "Start URLs",
            "type": "array",
            "description": "URLs to start crawling from. The scraper will extract emails from these pages and follow links up to the specified depth.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "max_depth": {
            "title": "Maximum Crawl Depth",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum depth of links to follow from start URLs. 0 = only start URLs, 1 = start URLs + one level of links, etc.",
            "default": 2
          },
          "stay_on_domain": {
            "title": "Stay on Same Domain",
            "type": "boolean",
            "description": "Only follow links that stay on the same domain as each start URL. When enabled, the crawler won't visit external sites.",
            "default": true
          },
          "use_sitemap": {
            "title": "Use Sitemap",
            "type": "boolean",
            "description": "Discover pages from the site's sitemap.xml to reach contact/about pages directly, in addition to following links. Discovered pages still respect the per-domain and global page limits.",
            "default": true
          },
          "priority_keywords": {
            "title": "Priority Keywords",
            "type": "array",
            "description": "Links whose URL path or link text contains one of these keywords as a whole word are crawled first, which helps reach contact, legal notice and about pages quickly. A keyword can be several words (\"about us\"); case and German umlauts don't matter, so \"ueber-uns\" also matches \"Über uns\". Leave empty to use the built-in defaults.",
            "default": [
              "contact",
              "contactus",
              "kontakt",
              "kontaktformular",
              "ansprechpartner",
              "reach",
              "connect",
              "email",
              "imprint",
              "impressum",
              "legal",
              "privacy",
              "datenschutz",
              "datenschutzerklaerung",
              "datenschutzerklarung",
              "about",
              "aboutus",
              "ueber-uns",
              "uber-uns",
              "team",
              "people",
              "staff",
              "mitarbeiter",
              "job",
              "jobs",
              "career",
              "careers",
              "karriere",
              "press",
              "presse",
              "support",
              "help"
            ],
            "items": {
              "type": "string"
            }
          },
          "exclude_role_emails": {
            "title": "Exclude Role-Based Emails",
            "type": "boolean",
            "description": "Skip automated/role addresses such as noreply@, no-reply@, postmaster@, mailer-daemon@, and bounce@.",
            "default": false
          },
          "same_domain_emails_only": {
            "title": "Only Same-Domain Emails",
            "type": "boolean",
            "description": "Keep only emails whose domain matches the website they were found on. For example, when crawling sap.com this keeps name@sap.com but drops name@gmail.com.",
            "default": false
          },
          "include_email_patterns": {
            "title": "Include Email Patterns",
            "type": "array",
            "description": "Regular expressions; if any are provided, only emails matching at least one pattern are kept. Leave empty to keep all. Example: \"@sap\\\\.com$\".",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "exclude_email_patterns": {
            "title": "Exclude Email Patterns",
            "type": "array",
            "description": "Regular expressions; emails matching any of these are dropped. Applied after the include filter. Example: \"@(example|test)\\\\.com$\".",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "max_concurrent_pages": {
            "title": "Max Concurrent Pages",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum number of pages to process simultaneously. Higher values crawl faster but use more memory; lower values are gentler on target sites.",
            "default": 22
          },
          "max_pages_per_domain": {
            "title": "Maximum Pages per Domain",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of pages to crawl from each individual domain. Leave empty for unlimited. This limit applies separately to each domain.",
            "default": 200
          },
          "max_requests_per_run": {
            "title": "Maximum Requests",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of pages to crawl globally across all domains. Leave empty for unlimited."
          },
          "request_delay_min": {
            "title": "Minimum Request Delay (seconds)",
            "minimum": 0,
            "maximum": 60,
            "type": "number",
            "description": "Minimum delay between consecutive requests to the same domain. A random value between min and max is used per request; different domains are crawled in parallel. Recommended: 1-2 seconds.",
            "default": 1
          },
          "request_delay_max": {
            "title": "Maximum Request Delay (seconds)",
            "minimum": 0,
            "maximum": 60,
            "type": "number",
            "description": "Maximum delay between consecutive requests to the same domain. A random value between min and max is used per request.",
            "default": 2
          },
          "respect_robots_txt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "Honor robots.txt directives including crawl delays and disallowed paths.",
            "default": false
          },
          "rotate_user_agents": {
            "title": "Rotate User Agents",
            "type": "boolean",
            "description": "Use a pool of realistic user agents to appear as different users.",
            "default": true
          },
          "max_block_retries": {
            "title": "Retries After a Block",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many more times a page is requested after the site refused it (HTTP 401, 403 or 429, or a challenge page) or the proxy failed, each time with a new session. A new session gets a new IP only from a rotating proxy (Apify Proxy, or several proxy URLs); without one, the same IP asks again, which rarely helps and can get it blocked for longer. 0 = never ask again.",
            "default": 2
          },
          "proxy_configuration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Proxy settings to avoid being blocked. Recommended for large crawls."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}