{
  "openapi": "3.0.1",
  "info": {
    "title": "Thomasnet Suppliers Scraper - US & Canada Manufacturers",
    "description": "Scrape Thomasnet industrial suppliers and manufacturers in the USA and Canada by product or service, ZIP/postal code, US state or Canadian province: company type, address, phone, website, sales and employee bands, year founded, categories. Only-new monitoring. $4 per 1,000 suppliers on Bronze.",
    "version": "0.1",
    "x-build-id": "O97NasvBduVZ9Ru2a"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/amitaviv~thomasnet-suppliers-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-amitaviv-thomasnet-suppliers-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/amitaviv~thomasnet-suppliers-scraper/runs": {
      "post": {
        "operationId": "runs-sync-amitaviv-thomasnet-suppliers-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/amitaviv~thomasnet-suppliers-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-amitaviv-thomasnet-suppliers-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",
        "properties": {
          "searchTerms": {
            "title": "Products or services",
            "type": "array",
            "description": "What the suppliers make or do, as you would type it in Thomasnet's search box, e.g. \"cnc machining\", \"injection molding\", \"ball valves\". One search per term (and per ZIP code or state below). Thomasnet shows visitors the first 25 suppliers of each search, in its own ranking; use ZIP codes or states to reach more. Up to 200 characters per term.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Thomasnet URLs",
            "type": "array",
            "description": "Optional: thomasnet.com pages to scrape as they are. A search URL (thomasnet.com/suppliers/search?searchterm=...), a category page (thomasnet.com/suppliers/usa/cnc-machining-45330503) or a company profile (thomasnet.com/company/<name>-<id>/profile). Thomasnet shows result pages after the first, and filters (company type, certification, location served), only to signed-in users: such a URL fails with a message saying so, because this actor does not sign in.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "zipCodes": {
            "title": "Near ZIP / postal codes",
            "type": "array",
            "description": "Optional: US ZIP codes (e.g. \"77002\") or Canadian postal codes (e.g. \"M5V 2T6\"; Thomasnet searches the area given by the first 3 characters, \"M5V\"). Each term is searched around each code within \"Radius\", the way Thomasnet's location box does (up to 25 suppliers per search, nearest area first in Thomasnet's ranking). Several codes with a small radius cover a metro area more completely.",
            "items": {
              "type": "string"
            }
          },
          "states": {
            "title": "US states / Canadian provinces",
            "type": "array",
            "description": "Optional: US states (and DC) or Canadian provinces as code or name, e.g. \"TX\", \"Ohio\", \"Washington DC\", \"Ontario\", \"QC\". Canadian territories are not covered here: put their postal areas (e.g. \"Y1A\") in \"zipCodes\". Each term is searched around the state's main industrial cities (1 to 13 per state or province, within \"Radius\"; in small states and next to state lines a smaller radius is used per city) and only suppliers with an address in the state are kept. Coverage is the 25 suppliers Thomasnet shows per city search, so a big state yields up to a few hundred suppliers per term, not all of them. \"Maximum suppliers per search\" applies to each term and state together: raise it (e.g. to 300) for big states.",
            "items": {
              "type": "string"
            }
          },
          "radiusMiles": {
            "title": "Radius (miles)",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Search radius around each ZIP / postal code or state / province city, in miles. Default 50. For states, some cities use a smaller radius of their own (e.g. 5 miles in DC, 8-15 in Rhode Island and near state or national borders) so that the results stay in the state.",
            "default": 50
          },
          "maxItems": {
            "title": "Maximum suppliers per search",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Stop each search (one term with one ZIP code, one term with one state, or one URL) after this many suppliers. A nationwide or ZIP search returns about 25 (what Thomasnet shows visitors); a state search about 25 per city, so for states raise this limit.",
            "default": 100
          },
          "includeProfileDetails": {
            "title": "Add company profile details",
            "type": "boolean",
            "description": "Also open each supplier's Thomasnet profile and add the category headings it lists (up to 25), the company's own description, the number of certifications it lists (by type), its social media and website links, and its product families. Slower (one more page per supplier); no extra charge. Certification names and ownership/diversity status are shown only to signed-in Thomasnet users and are not included.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new suppliers",
            "type": "boolean",
            "description": "Deliver (and charge) only suppliers that earlier runs with the same searches did not deliver. The first run delivers up to the maximum and remembers what it delivered; later runs deliver suppliers not delivered before, which includes suppliers the maximum cut off earlier, not only new listings. The memory is a key-value store named thomasnet-suppliers-scraper-monitor in your account.",
            "default": false
          },
          "monitorKey": {
            "title": "Monitor name",
            "type": "string",
            "description": "Optional: keeps separate \"only new\" memories for the same searches, e.g. one per client. Leave empty if you run one monitor."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Leave off (default). Thomasnet's bot protection refuses some requests, from data-center addresses more often; when it refuses one, the actor continues through Apify's US residential proxy on its own. Set a proxy here only to force every request through it from the start.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}