{
  "openapi": "3.0.1",
  "info": {
    "title": "Contact Page Finder: Find Contact Page & Contact Form URLs",
    "description": "Contact page finder API: find contact page URLs and contact form pages for any website from a list of domains. Checks homepage links, common paths and the sitemap, detects the contact form, and returns public emails, phones and social links. One row per site.",
    "version": "0.1",
    "x-build-id": "bs4DS3TmZi2td6zuv"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/data-done-right~contact-page-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-data-done-right-contact-page-finder",
        "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/data-done-right~contact-page-finder/runs": {
      "post": {
        "operationId": "runs-sync-data-done-right-contact-page-finder",
        "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/data-done-right~contact-page-finder/run-sync": {
      "post": {
        "operationId": "run-sync-data-done-right-contact-page-finder",
        "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": [
          "websites"
        ],
        "properties": {
          "websites": {
            "title": "Websites",
            "type": "array",
            "description": "Domains or website URLs to find the contact page for, one per line. Any URL is reduced to the site root. Example: apify.com, https://www.mozilla.org/en-US/, eff.org. IP addresses and internal names are rejected with a reason, and every site gets a result row.",
            "items": {
              "type": "string"
            }
          },
          "maxSites": {
            "title": "Max sites",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Hard cap on how many websites from the list are processed. Extra ones are skipped. Also caps your cost.",
            "default": 100
          },
          "followHomepageLinks": {
            "title": "Follow contact links on the homepage",
            "type": "boolean",
            "description": "Read the homepage and use links whose text or address says contact, kontakt, contacto, contato, contatti, nous contacter or get in touch. This is the strongest evidence and usually needs no extra request.",
            "default": true
          },
          "checkCommonPaths": {
            "title": "Try common contact paths",
            "type": "boolean",
            "description": "If the homepage has no usable contact link, try /contact, /contact-us, /about/contact, /get-in-touch, /support and locale variants such as /kontakt, /contacto, /contato, /contatti. A guessed page only counts if it really looks like a contact page.",
            "default": true
          },
          "checkSitemap": {
            "title": "Check the sitemap",
            "type": "boolean",
            "description": "If nothing was found yet, read the sitemap (from robots.txt or /sitemap.xml) and look for contact page URLs. At most 3 sitemap files are read per site.",
            "default": true
          },
          "detectForm": {
            "title": "Detect contact forms",
            "type": "boolean",
            "description": "Check whether the contact page has a form with email or message fields (a plain HTML form or an embedded Typeform, HubSpot, Jotform or Google Forms widget) and, if not, look at up to 2 other candidate pages. Newsletter, search and login forms are ignored. When off, hasContactForm is null.",
            "default": true
          },
          "extractPublicContacts": {
            "title": "Extract public emails, phones and social links",
            "type": "boolean",
            "description": "Return the email addresses and phone numbers the site publishes on its homepage and contact page (mailto and tel links and visible text), plus its LinkedIn, X, Facebook and Instagram profile links. Nothing is guessed or verified.",
            "default": true
          },
          "includePersonalEmails": {
            "title": "Include personal-looking emails",
            "type": "boolean",
            "description": "Keep addresses that look like a person (jane.doe@acme.com) in the emails list, marked type personal. Turn off to keep only role mailboxes (info@, support@) and unclassified aliases. Use published addresses within GDPR and CAN-SPAM rules.",
            "default": true
          },
          "maxRequestsPerSite": {
            "title": "Max pages read per site",
            "minimum": 2,
            "maximum": 30,
            "type": "integer",
            "description": "Upper limit of pages fetched per website: the homepage, candidate contact pages and sitemap files. robots.txt requests are not counted. Most sites need 2 to 4.",
            "default": 10
          },
          "concurrency": {
            "title": "Sites read in parallel",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many different websites are read at the same time. One website is always read one request at a time.",
            "default": 5
          },
          "delaySecs": {
            "title": "Delay between requests to one site (seconds)",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Pause between two requests to the same website. A longer Crawl-delay in the site's robots.txt (up to 10 s) wins.",
            "default": 1
          },
          "timeoutSecs": {
            "title": "Timeout per request (seconds)",
            "minimum": 2,
            "maximum": 30,
            "type": "integer",
            "description": "Time allowed for one page request. Slow or unreachable sites become a row with status unreachable.",
            "default": 10
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. Send requests through Apify Proxy or your own proxies. Usually not needed. Bot protection is never bypassed: a site that blocks the request is reported as blocked.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}