{
  "openapi": "3.0.1",
  "info": {
    "title": "Impressum Scraper: Pay per Filled German Imprint",
    "description": "Scrape German Impressum pages and pay only for filled imprints, with whichever of company name, address, register court and number, VAT ID, legal representatives, email and phone the page prints. No per-site fee, no start fee beyond the platform's, and a time budget for API and agent runs.",
    "version": "0.2",
    "x-build-id": "aLmhXTGdkwBNI9hP7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/pradio~imprint-contact/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-pradio-imprint-contact",
        "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/pradio~imprint-contact/runs": {
      "post": {
        "operationId": "runs-sync-pradio-imprint-contact",
        "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/pradio~imprint-contact/run-sync": {
      "post": {
        "operationId": "run-sync-pradio-imprint-contact",
        "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": {
          "startUrls": {
            "title": "Start Urls",
            "type": "array",
            "description": "The sites to read: each entry is a site root or its imprint/legal-notice page; one output row per site, and two entries on the same domain share one row.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Optional search terms resolved to domains through an official search API (Brave by default, Google Custom Search with searchCx). Each resolved domain is then read like a startUrls entry. Search looks up businesses, not people: a query that reads as a person's name is not sent and returns a free search_failed row. Bring your own key via searchApiKey, no key is configured for you, so a query sent without one returns a free search_failed row, not a lookup.",
            "items": {
              "type": "string"
            }
          },
          "searchEngine": {
            "title": "Search engine",
            "enum": [
              "brave",
              "google"
            ],
            "type": "string",
            "description": "Which official search API resolves searchQueries: brave (Brave Search API, needs searchApiKey) or google (Google Custom Search JSON API, needs searchApiKey AND searchCx).",
            "default": "brave"
          },
          "searchApiKey": {
            "title": "Search API key",
            "type": "string",
            "description": "Your own key for the chosen search engine, required for searchQueries. Your key's own terms and quota apply to the searches; this Actor bills nothing per query. The key is kept secret: it never appears in a row, the log or the run summary."
          },
          "searchCx": {
            "title": "Search engine ID (Google only)",
            "type": "string",
            "description": "Google Custom Search programmable engine ID (cx), required when searchEngine is google. Create one at https://programmablesearchengine.google.com with 'search the entire web' enabled."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy for site requests: every request of the run uses the group you set, datacenter by default. When a site refuses, rate-limits or answers with a bot challenge you get a free fetch_failed row naming it, and it is never asked again: not through another proxy group, a new session or the browser. Pick a residential group for a whole run if you need one: it changes where requests leave from, never whether a site's no is honoured.",
            "default": {
              "useApifyProxy": true
            }
          },
          "useBrowser": {
            "title": "Headless browser fallback",
            "type": "boolean",
            "description": "When a site answers a plain request with a JavaScript shell, render it headlessly and read the rendered page. A block or a bot challenge is not a shell and is never rendered. Costs more memory and seconds per hit; switch off for cheap list runs over sites that do not need it.",
            "default": true
          },
          "maxItems": {
            "title": "Maximum items",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "The most rows one run returns, at most 10,000; fetching and pushing stop there and the run log notes the cap.",
            "default": 100
          },
          "maxRunSeconds": {
            "title": "Time budget (seconds)",
            "minimum": 30,
            "type": "integer",
            "description": "Optional. The run stops starting new sites in time to write its rows and finish within about this many seconds, and every site it did not get to comes back as a free aborted row naming it. Set it when an API call or an AI agent waits for the answer, for example 240 under a 300-second wait. Left empty, the run reads the whole list and still stops early enough before its own timeout to write every site it read."
          },
          "verifyEmails": {
            "title": "Check e-mail domains (MX)",
            "type": "boolean",
            "description": "Check each e-mail address found: is it well formed, and does its domain publish mail servers (MX records)? The answer lands in email_mx_ok. A DNS lookup only; no mail server is contacted and nothing is sent.",
            "default": false
          },
          "skipWithoutEmail": {
            "title": "Skip sites without an e-mail",
            "type": "boolean",
            "description": "When an imprint names no company e-mail address, return a free no_email row for the site instead of the company record. The row is never billed.",
            "default": false
          },
          "maxDomainsPerSearchQuery": {
            "title": "Maximum domains per search query",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "The most domains one searchQueries entry may resolve to, at most 20. One broad query cannot starve the rest: each entry gets this many results before the next is asked.",
            "default": 20
          },
          "exclude": {
            "title": "Exclude",
            "type": "array",
            "description": "One entry per line, a domain (dm.de, or a full URL) or a company or person name. A start URL on an excluded domain is skipped before any fetch; a fetched row whose company_name, legal_representatives or decision_makers names an excluded entry is dropped, never billed. Skips and drops are counted in RUN_SUMMARY under excluded. The Actor's own exclusion list, which a person or company can ask to join, is applied the same way; see the README's Personal data section.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}