{
  "openapi": "3.0.1",
  "info": {
    "title": "Bulk Email Verifier — Low-Bounce List Cleaner",
    "description": "Verify any list of emails before you send. Checks syntax, domain MX, disposable, role and free-provider — returns a valid / risky / invalid verdict per address so your bounce rate stays low.",
    "version": "1.0",
    "x-build-id": "saUNPuDfiWzfe4nwB"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/leadharbor~bulk-email-verifier/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-leadharbor-bulk-email-verifier",
        "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/leadharbor~bulk-email-verifier/runs": {
      "post": {
        "operationId": "runs-sync-leadharbor-bulk-email-verifier",
        "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/leadharbor~bulk-email-verifier/run-sync": {
      "post": {
        "operationId": "run-sync-leadharbor-bulk-email-verifier",
        "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": {
          "emails": {
            "title": "Emails to verify",
            "type": "array",
            "description": "Paste the email addresses to check, one per line. You can combine this with a dataset or a CSV URL — everything is merged and de-duplicated.",
            "items": {
              "type": "string"
            }
          },
          "inputDatasetId": {
            "title": "Or: emails from an Apify dataset",
            "type": "string",
            "description": "Dataset ID to pull emails from — e.g. the output of the Google Maps Verified Email Scraper. Leave blank if you are not chaining actors."
          },
          "emailField": {
            "title": "Dataset email field",
            "type": "string",
            "description": "Which field of that dataset holds the email address.",
            "default": "email"
          },
          "csvUrl": {
            "title": "Or: CSV URL",
            "type": "string",
            "description": "A direct link to a CSV file. Google Sheets share links and Dropbox links are converted automatically — the sheet must be viewable by anyone with the link."
          },
          "emailColumn": {
            "title": "CSV email column",
            "type": "string",
            "description": "Exact header name of the email column. Leave blank to auto-detect (looks for common headers, then for the column that actually contains addresses)."
          },
          "checkSmtp": {
            "title": "SMTP mailbox check",
            "type": "boolean",
            "description": "Ask the mail server whether the exact mailbox exists (RCPT TO) and detect catch-all domains. Requires a relay — without one the run is MX-only and says so on every row.",
            "default": true
          },
          "relayUrl": {
            "title": "SMTP relay URL",
            "type": "string",
            "description": "Base URL of the SMTP relay that performs the mailbox check (port 25 is blocked on Apify, so the probe runs on your own server). Leave blank to use the EMAIL_RELAY_URL environment variable."
          },
          "relayToken": {
            "title": "SMTP relay token",
            "type": "string",
            "description": "Bearer token for the relay. Leave blank to use the EMAIL_RELAY_TOKEN environment variable."
          },
          "treatRoleAsRisky": {
            "title": "Flag role addresses as risky",
            "type": "boolean",
            "description": "Mark generic inboxes like info@, sales@ and support@ as risky. They are deliverable but rarely get a reply.",
            "default": true
          },
          "treatFreeProviderAsRisky": {
            "title": "Flag free providers as risky",
            "type": "boolean",
            "description": "Mark gmail.com, yahoo.com and similar as risky. Off by default — most B2C lists are full of perfectly good free-provider addresses.",
            "default": false
          },
          "skipInvalidSyntax": {
            "title": "Don't charge for syntax failures",
            "type": "boolean",
            "description": "Malformed addresses are caught offline for free. Leave this on and you are not billed for them.",
            "default": true
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many addresses to check at once. Probes against any single mail server are capped at 3 regardless, so raising this mainly speeds up mixed-domain lists.",
            "default": 20
          },
          "timeoutSecs": {
            "title": "Timeout per check (seconds)",
            "minimum": 2,
            "maximum": 60,
            "type": "integer",
            "description": "How long to wait on a DNS lookup or a mail server before giving up and returning 'unknown'.",
            "default": 10
          },
          "maxRetries": {
            "title": "Retries on temporary failure",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Greylisting (a 4xx 'try again later' from the mail server) is retried this many times with backoff before the address is marked 'unknown'.",
            "default": 2
          },
          "maxEmails": {
            "title": "Max emails per run",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Hard cap on how many addresses one run will verify. Protects you from an accidentally huge input.",
            "default": 50000
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}