{
  "openapi": "3.0.1",
  "info": {
    "title": "Email List Cleaner - Bulk Email Validator & Disposable Check",
    "description": "Email list cleaner and bulk email validator API without SMTP pings: validate syntax, domain and MX records, disposable, role and free-provider flags, and typos (gmial.com → gmail.com). CSV upload or another Actor's dataset. Failed lines are free. $0.50 per 1,000.",
    "version": "0.1",
    "x-build-id": "NVi4lznhMy3vFPbCH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tidytools~bulk-email-validator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tidytools-bulk-email-validator",
        "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/tidytools~bulk-email-validator/runs": {
      "post": {
        "operationId": "runs-sync-tidytools-bulk-email-validator",
        "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/tidytools~bulk-email-validator/run-sync": {
      "post": {
        "operationId": "run-sync-tidytools-bulk-email-validator",
        "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": "E-mail addresses",
            "type": "array",
            "description": "One address per line (use Bulk edit to paste a whole list). \"Jane Doe <jane@example.com>\" and mailto: links are accepted. Lines without an @ get a free error row.",
            "items": {
              "type": "string"
            }
          },
          "emailsText": {
            "title": "Or paste a list",
            "type": "string",
            "description": "Addresses separated by new lines, commas, semicolons or tabs, e.g. a column copied from a spreadsheet."
          },
          "csvFile": {
            "title": "Or upload a CSV file",
            "type": "string",
            "description": "A CSV or TSV file (up to 50 MB), or a link to one (e.g. a Google Sheets \"Publish to the web\" CSV link). The column named like \"email\" is used, or the column with the most addresses; set \"CSV column\" to choose. Excel files: save as CSV first."
          },
          "csvColumn": {
            "title": "CSV column (optional)",
            "type": "string",
            "description": "Header name (e.g. \"Work Email\") or column number (1 = first) of the addresses in the CSV file. Empty = detect automatically."
          },
          "datasetId": {
            "title": "Or read from a dataset",
            "type": "string",
            "description": "ID of a dataset from another run, e.g. a contact or lead scraper. Every address in the chosen field is validated (fields holding several addresses, such as an \"emails\" array, are expanded). With the dataset of TidyTools' Google Maps Email Extractor (website-contact-extractor), every address found on each business's website is checked and keeps the row's businessName, placeId, website, rowId and isBestEmail, so the \"Ready to send\" list merges back into your Maps export or sheet."
          },
          "datasetField": {
            "title": "Dataset field (optional)",
            "type": "string",
            "description": "Field with the addresses (dot paths allowed, e.g. \"contact.email\"). Empty = the first field named like email/emails/bestEmail/primaryEmail, or the field whose values contain addresses. For Google Maps Email Extractor results that is \"emails\" (every address found); set \"bestEmail\" to check only the one best address per business (cheaper)."
          },
          "keepFields": {
            "title": "Copy these source columns to the output",
            "type": "array",
            "description": "For CSV and dataset input: column or field names to copy into each row's sourceFields (e.g. \"name\", \"company\"), so the result maps back to your list.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "dedupe": {
            "title": "Merge duplicate addresses",
            "type": "boolean",
            "description": "Validate (and charge) each address once, ignoring upper/lower case. The row gets duplicates = how many more times the address appeared. Turn off to get one row per input line.",
            "default": true
          },
          "maxEmails": {
            "title": "Max e-mails",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Cost cap: at most this many unique addresses are validated per run ($0.50 per 1,000 on the Free plan). The rest are listed in SUMMARY.notProcessed.",
            "default": 100000
          },
          "maxConcurrency": {
            "title": "Parallel batches",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Batches of 50 addresses checked at the same time. Higher values finish big lists sooner; the price is the same.",
            "default": 4
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}