{
  "openapi": "3.0.1",
  "info": {
    "title": "✨ German Imprint Scraper & Leads Finder (Google Search)",
    "description": "AI-powered Apify Actor that scrapes Impressum pages on German websites and extracts decision-makers (Geschäftsführer, Vorstand), validated B2B emails, company addresses, VAT IDs, and Handelsregister numbers. Structured JSON output for B2B lead generation, sales prospecting, and CRM enrichment.",
    "version": "2.2",
    "x-build-id": "Zfbvmz7XYgvjHjsDw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/winningsolutions~german-imprint-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-winningsolutions-german-imprint-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/winningsolutions~german-imprint-scraper/runs": {
      "post": {
        "operationId": "runs-sync-winningsolutions-german-imprint-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/winningsolutions~german-imprint-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-winningsolutions-german-imprint-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": {
          "targetUrls": {
            "title": "Target URLs",
            "type": "array",
            "description": "Websites to scrape. Each item must be an object with a `url` key, for example `{ \"url\": \"https://example.de\" }`. The Console uses the request-list editor; API and MCP callers should use the same JSON shape. Required when Input Mode is Target URLs.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "inputMode": {
            "title": "Input Mode",
            "enum": [
              "urls",
              "searchTerms"
            ],
            "type": "string",
            "description": "Choose how to feed websites into the scraper. Target URLs: provide a list of websites directly. Google Search Terms: discover URLs from Google search results, then scrape their imprints.",
            "default": "urls"
          },
          "searchTerms": {
            "title": "Search Terms",
            "type": "string",
            "description": "One Google query per line. Used only when Input Mode is Google Search Terms. Ignored when Input Mode is Target URLs."
          },
          "resultsPerSearchTerm": {
            "title": "Results per Search Term",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Number of organic Google results to fetch per search term (1–100). Each page of ~10 results counts as one serp-search-page charge ($0.005 per page).",
            "default": 10
          },
          "locationName": {
            "title": "Location",
            "type": "string",
            "description": "Region for Google search results. Enter a country or city spelled out in full, e.g. Germany or Berlin.",
            "default": "Germany"
          },
          "languageCode": {
            "title": "Language Code",
            "type": "string",
            "description": "ISO language code for Google results (e.g. 'de', 'en').",
            "default": "de"
          },
          "device": {
            "title": "Device",
            "enum": [
              "desktop",
              "mobile"
            ],
            "type": "string",
            "description": "Device type for Google SERP requests.",
            "default": "desktop"
          },
          "domainBlacklist": {
            "title": "Domain Blacklist",
            "type": "string",
            "description": "Comma-separated domains to exclude from output when using Google Search Terms lead discovery. Matching URLs are still charged but not written to the dataset. Ignored when Input Mode is Target URLs."
          },
          "skipResultsWithoutEmail": {
            "title": "Skip Results Without Email",
            "type": "boolean",
            "description": "If true, rows without a non-empty `email` are not written to the default dataset. Error rows are still saved. Use for lead lists where an email is mandatory.",
            "default": false
          },
          "maxRetries": {
            "title": "Max Retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times to retry failed HTTP or scrape steps for a URL (0 to 10). Does not change which fields are extracted.",
            "default": 3
          },
          "timeout": {
            "title": "Request Timeout (seconds)",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "Per-request timeout in seconds for HTTP-style steps (5 to 60).",
            "default": 5
          },
          "validateEmail": {
            "title": "Validate Email Addresses",
            "type": "boolean",
            "description": "If true, runs deliverability-oriented checks on extracted emails and sets `email_status` (e.g. DELIVERABLE, UNDELIVERABLE). Extra usage fees apply when enabled. If false, `email_status` may still be present but reflects no full validation pass.",
            "default": false
          },
          "disableImprintUrl": {
            "title": "Disable Imprint URL",
            "type": "boolean",
            "description": "If true, omits `imprint_url` and `imprint_status` from each dataset row for privacy or leaner exports. Same business logic runs; only the stored fields change.",
            "default": false
          },
          "disableContactPerson": {
            "title": "Disable Contact Person",
            "type": "boolean",
            "description": "If true, omits the whole `contact_person` object from each dataset row.",
            "default": false
          },
          "disableDecisionMakers": {
            "title": "Disable Decision Makers Array",
            "type": "boolean",
            "description": "If true, omits the `decision_makers` array from each dataset row. The singular `contact_person` field is not affected.",
            "default": false
          },
          "disableCompanyName": {
            "title": "Disable Company Name",
            "type": "boolean",
            "description": "If true, omits `company_name` from each dataset row.",
            "default": false
          },
          "disableCompanyAddress": {
            "title": "Disable Company Address",
            "type": "boolean",
            "description": "If true, omits `company_address` from each dataset row.",
            "default": false
          },
          "disablePhoneNumber": {
            "title": "Disable Phone Number",
            "type": "boolean",
            "description": "If true, omits `phone_number` from each dataset row.",
            "default": false
          },
          "disableEmail": {
            "title": "Disable Email",
            "type": "boolean",
            "description": "If true, omits `email` and `email_status` from each dataset row.",
            "default": false
          },
          "disableRegisterNumber": {
            "title": "Disable Register Number",
            "type": "boolean",
            "description": "If true, omits `register_number` (Handelsregister) from each dataset row.",
            "default": false
          },
          "disableVatId": {
            "title": "Disable VAT ID (Umsatzsteuer-Identifikationsnummer)",
            "type": "boolean",
            "description": "If true, omits `vat_id` from each dataset row.",
            "default": false
          },
          "performanceMax": {
            "title": "PerformanceMAX",
            "type": "boolean",
            "description": "High-throughput mode: higher internal concurrency (about 3x faster for large lists). Requires at least 2 GB Actor memory. Leave false on the 1 GB memory tier to avoid out-of-memory failures.",
            "default": false
          },
          "useHeadlessBrowser": {
            "title": "Use headless browser only",
            "type": "boolean",
            "description": "Programmatic flag. If true, force browser-based scraping path for all URLs instead of axios-first mode.",
            "default": false
          },
          "enableAxiosRetry": {
            "title": "Enable axios-first with browser fallback",
            "type": "boolean",
            "description": "Programmatic flag. If true, run axios-first scraping with optional browser fallback retries.",
            "default": true
          },
          "retryOptions": {
            "title": "Retry options",
            "type": "object",
            "description": "Programmatic flag. Controls retry trigger criteria used by axios-first mode.",
            "properties": {
              "requireEmail": {
                "title": "Require email for retry",
                "type": "boolean",
                "description": "Trigger retry when email is missing.",
                "default": true
              },
              "requireContactPerson": {
                "title": "Require contact person for retry",
                "type": "boolean",
                "description": "Trigger retry when contact person is missing.",
                "default": true
              },
              "requireAnyField": {
                "title": "Require any field for retry",
                "type": "boolean",
                "description": "Trigger retry if no relevant fields are found at all.",
                "default": false
              },
              "minFieldsRequired": {
                "title": "Minimum fields before skip retry",
                "type": "integer",
                "description": "Minimum extracted fields before retry is skipped.",
                "minimum": 1,
                "maximum": 10,
                "default": 3
              }
            },
            "additionalProperties": false
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Optional Apify Proxy or custom proxy URLs. Use when sites block datacenter IPs. Shape matches Apify's proxy editor (`useApifyProxy`, optional `proxyUrls`, `groups`, `countryCode`). Proxy usage is included in the base cost as documented for this Actor."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}