{
  "openapi": "3.0.1",
  "info": {
    "title": "ThomasNet Scraper - Suppliers, Manufacturers & Company Data",
    "description": "Scrape ThomasNet suppliers and manufacturers by keyword, category, location, certification or company type, or paste profile URLs. Get one rich record per company with contacts, certifications, products, locations, coordinates, social links, sales data and more.",
    "version": "1.0",
    "x-build-id": "VdYXcCW4gUTQHPVX3"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~thomasnet-supplier-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-thomasnet-supplier-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/abotapi~thomasnet-supplier-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-thomasnet-supplier-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/abotapi~thomasnet-supplier-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-thomasnet-supplier-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Choose how to find companies. 'search' runs keyword/category searches with filters. 'url' scrapes the company-profile or search URLs you paste.",
            "default": "search"
          },
          "queries": {
            "title": "Search terms",
            "type": "array",
            "description": "One or more keywords or product categories to search, e.g. 'valves', 'cnc machining', 'industrial pumps'. Each term is searched independently.",
            "default": [
              "valves"
            ],
            "items": {
              "type": "string"
            }
          },
          "state": {
            "title": "State / region (optional)",
            "type": "string",
            "description": "Two-letter US state or Canadian province code to narrow the search by location, e.g. 'OH', 'CA', 'TX'. Leave empty for a North-America-wide search."
          },
          "zip": {
            "title": "ZIP / postal code (optional)",
            "type": "string",
            "description": "ZIP or postal code to center a radius search, e.g. '44023'. Use together with Radius."
          },
          "radius": {
            "title": "Radius (miles, optional)",
            "minimum": 0,
            "type": "integer",
            "description": "Distance in miles around the ZIP / postal code to include. Only applies when a ZIP is set."
          },
          "certification": {
            "title": "Certification filter (optional)",
            "type": "string",
            "description": "Restrict results to suppliers holding a certification, e.g. 'ISO 9001', 'Woman Owned', 'AS9100'. Matched against the supplier-validation and quality-certification facets."
          },
          "companyType": {
            "title": "Company type",
            "enum": [
              "",
              "M",
              "D",
              "S",
              "C",
              "R"
            ],
            "type": "string",
            "description": "Filter by the type of supplier.",
            "default": ""
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "company_az",
              "company_za"
            ],
            "type": "string",
            "description": "Order of the results returned by the search.",
            "default": "relevance"
          },
          "urls": {
            "title": "Company or search URLs",
            "type": "array",
            "description": "Multi-URL mode: paste ThomasNet company-profile URLs (e.g. https://www.thomasnet.com/company/acme-corp-12345/profile) or search URLs. Search-mode filter fields are ignored. Search URLs return matching suppliers up to your result and page limits.",
            "items": {
              "type": "string"
            }
          },
          "fetchDetails": {
            "title": "Fetch full company profiles",
            "type": "boolean",
            "description": "When on, enrich each company with its full profile, including available certifications, locations, products and news. When off, return search-result fields without a separate company profile request.",
            "default": true
          },
          "maxPages": {
            "title": "Max pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum result pages per search. Empty or 0 means unlimited. The run still stops at Max items."
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum companies to save across the run. In incremental mode, caps companies checked, including unchanged suppliers. Previously saved resume IDs do not consume this limit. Set 0 for unlimited.",
            "default": 20
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID from this actor. Suppliers already saved by that run are skipped before enrichment. Keep the same search or URLs to continue collecting unseen suppliers."
          },
          "incrementalMode": {
            "title": "Track changes across recurring runs",
            "type": "boolean",
            "description": "The first run marks suppliers NEW. Later runs return NEW and UPDATED suppliers. Max items bounds the suppliers checked, including unchanged suppliers. State is separate for each user and search configuration.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional)",
            "type": "string",
            "description": "Optional name for a recurring monitoring campaign. Reuse it with the same search and enrichment settings. Leave empty to derive a campaign from your input."
          },
          "emitUnchanged": {
            "title": "Include unchanged suppliers",
            "type": "boolean",
            "description": "Incremental mode only. Also save suppliers whose content has not changed, marked UNCHANGED. These saved results and successful enrichment are charged normally.",
            "default": false
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional connection settings for accessing the source.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": []
            }
          },
          "mcpConnectors": {
            "title": "Export to your apps (MCP)",
            "type": "array",
            "description": "Optional. Connect MCP servers (Notion, Linear, Airtable, Apify) to push the scraped companies straight into your tools after the run."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page URL",
            "type": "string",
            "description": "Optional. When a Notion MCP connector is set, the URL of the Notion page under which a results database is created."
          },
          "maxNotifyListings": {
            "title": "Max items to export",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Cap on how many companies are pushed to the connected MCP apps."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}