{
  "openapi": "3.0.1",
  "info": {
    "title": "ProvenExpert Scraper - DACH Business Leads with Email & Phone",
    "description": "Scrape ProvenExpert business profiles as B2B leads: email, phone, mobile, website, Impressum, address, rating and recommendation rate. Search any trade in any German city or postcode, or sweep Germany, Austria and Switzerland. $6.50 per 1,000 leads, billed only when a lead has a contact.",
    "version": "0.1",
    "x-build-id": "IPrzmrjodVVWm6Cnw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~provenexpert-business-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-provenexpert-business-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/scrapersdelight~provenexpert-business-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-provenexpert-business-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/scrapersdelight~provenexpert-business-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-provenexpert-business-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": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "search",
              "sitemap",
              "profiles"
            ],
            "type": "string",
            "description": "search = businesses matching a trade/keyword in German cities or postcodes (ProvenExpert's own directory search). sitemap = sweep the site's public sitemap, profile by profile — the only way to reach Austrian and Swiss businesses, filtered with Countries. profiles = your own list of ProvenExpert profile URLs.",
            "default": "search"
          },
          "searchTerms": {
            "title": "Trades / keywords (search mode)",
            "type": "array",
            "description": "What to look for, in German, exactly as you would type it into ProvenExpert's search: an industry (\"Steuerberatung & Buchhaltung\", \"Handwerk\", \"Hotels & Unterkünfte\") or any keyword (\"Steuerberater\", \"Dachdecker\", \"Zahnarzt\"). Every term is searched in every location.",
            "default": [
              "Steuerberater"
            ],
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "German cities or postcodes (search mode)",
            "type": "array",
            "description": "German city names (\"München\", \"Frankfurt am Main\") or 5-digit postcodes (\"10115\"). ProvenExpert's search covers GERMANY ONLY — Austrian and Swiss places are rejected by the site; use mode \"sitemap\" with Countries AT/CH for those.",
            "default": [
              "München"
            ],
            "items": {
              "type": "string"
            }
          },
          "radiusKm": {
            "title": "Radius around each location (search mode)",
            "enum": [
              "0",
              "5",
              "10",
              "20",
              "30",
              "50",
              "100",
              "150",
              "200"
            ],
            "type": "string",
            "description": "Also include businesses within this distance of the city / postcode — the same radius choices the site offers. 0 = the place itself.",
            "default": "0"
          },
          "onlyInSearchedCity": {
            "title": "Only businesses located IN the searched city / postcode",
            "type": "boolean",
            "description": "ProvenExpert's search also lists businesses that SERVE a place from outside it, even at radius 0 (measured: Dachdecker in Köln = 139 listed, 51 with a Köln address; Handwerk in Berlin = 2,738 listed, 2,050 in Berlin). On: keep only businesses whose address city (or postcode, when you searched a postcode) is the searched place. Filtered businesses are never charged.",
            "default": false
          },
          "profileUrls": {
            "title": "Profile URLs or slugs (profiles mode)",
            "type": "array",
            "description": "ProvenExpert profile URLs, e.g. https://www.provenexpert.com/de-de/pates-ag/ or just the slug pates-ag. Any locale form works.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Keep only businesses whose address is in these countries (from the profile's own address). Search mode is Germany-only by the site's design; this filter matters most for the sitemap sweep.",
            "items": {
              "type": "string",
              "enum": [
                "DE",
                "AT",
                "CH",
                "LI",
                "LU",
                "NL",
                "BE",
                "FR",
                "IT",
                "ES",
                "PL",
                "GB",
                "US"
              ],
              "enumTitles": [
                "Germany",
                "Austria",
                "Switzerland",
                "Liechtenstein",
                "Luxembourg",
                "Netherlands",
                "Belgium",
                "France",
                "Italy",
                "Spain",
                "Poland",
                "United Kingdom",
                "United States"
              ]
            },
            "default": [
              "DE",
              "AT",
              "CH"
            ]
          },
          "sitemapShards": {
            "title": "Sitemap shards (sitemap mode)",
            "type": "array",
            "description": "The sitemap is split into 256 shards named 00 to ff, each ~6,900 profile URLs (~2,770 of them German-language). Leave empty to sweep all of them in order, or list the shards to cover (e.g. \"00\", \"01\") to split a full sweep across several runs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "sitemapLocales": {
            "title": "Profile locales (sitemap mode)",
            "type": "array",
            "description": "Which language sections of the sitemap to read. de-de holds the German, Austrian and Swiss businesses (the site has no de-at or de-ch section). Others: en-us, en-gb, es-es, fr-fr, nl-nl, pl-pl, it-it …",
            "default": [
              "de-de"
            ],
            "items": {
              "type": "string"
            }
          },
          "updatedSince": {
            "title": "Only profiles updated since (sitemap mode)",
            "type": "string",
            "description": "Skip profiles whose sitemap last-modified date is older than this (YYYY-MM-DD). Use it for a weekly delta: new and recently edited businesses only.",
            "default": ""
          },
          "maxResults": {
            "title": "Max leads",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after delivering this many businesses in total (cost guard). 0 = no limit.",
            "default": 50
          },
          "onlyWithContact": {
            "title": "Only businesses with a phone, email or website",
            "type": "boolean",
            "description": "On (recommended): a profile that publishes no phone, mobile, email or website is skipped and never charged. Off: such profiles are delivered too, FREE of charge (flagged hasReachableContact=false).",
            "default": true
          },
          "requireEmail": {
            "title": "Only businesses with an email",
            "type": "boolean",
            "description": "Skip businesses that publish no email address. Skipped profiles are never charged.",
            "default": false
          },
          "requirePhone": {
            "title": "Only businesses with a phone number",
            "type": "boolean",
            "description": "Skip businesses that publish neither a landline nor a mobile number. Skipped profiles are never charged.",
            "default": false
          },
          "fetchProfileDetails": {
            "title": "Open each profile page (Impressum, mobile, fax, contact person, recommendation rate)",
            "type": "boolean",
            "description": "Search mode only. On: each business's profile page is read for the Impressum link or text, mobile and fax numbers, the named contact person, the recommendation rate, native vs imported rating counts and whether the owner has claimed the profile. Off: faster, directory data only (name, address, phone, email, website, rating, industries, geo). Sitemap and profiles modes always read the page.",
            "default": true
          },
          "maxPassesPerSearch": {
            "title": "Max sweeps per search",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "ProvenExpert's search returns results in a slightly different order on every request, so one pass over the pages misses ~6% of a large result set. The actor re-sweeps until it has collected every listed business or two passes find nothing new. A re-sweep only re-reads the result pages (profiles already delivered are not fetched again), so extra passes are cheap. Measured on Handwerk in Berlin (2,738 listed): 2,738 after 3 passes in one run, 2,733 after 6 in another.",
            "default": 10
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "How many profile pages to fetch at once.",
            "default": 8
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Default: no proxy — ProvenExpert has no anti-bot wall (measured 2026-09-22), so requests go straight from the Apify platform at no proxy cost. If runs ever start reporting unreachable profiles, switch on Apify Proxy and SELECT the RESIDENTIAL group (a proxy with no group chosen is not available on every plan; residential is billed per GB).",
            "default": {
              "useApifyProxy": false
            }
          },
          "debugSaveRawSamples": {
            "title": "Save raw samples (debug)",
            "type": "boolean",
            "description": "Store the first search-API page and the first profile pages as fetched in the run's key-value store (SAMPLE_*), for troubleshooting a parse.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}