{
  "openapi": "3.0.1",
  "info": {
    "title": "State Bids Scraper: COMMBUYS, BidBuy, NJSTART, OregonBuys",
    "description": "State government bids & RFP scraper: open bids from Illinois BidBuy, COMMBUYS, NJSTART, OregonBuys and NevadaEPro with deadline, buyer contact, NIGP codes. No login. Export data, run via API, schedule and monitor runs, or integrate with other tools.",
    "version": "0.1",
    "x-build-id": "QhY391cbg8dR6TkYB"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/chimey_forearm~state-bids-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-chimey_forearm-state-bids-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/chimey_forearm~state-bids-scraper/runs": {
      "post": {
        "operationId": "runs-sync-chimey_forearm-state-bids-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/chimey_forearm~state-bids-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-chimey_forearm-state-bids-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": {
          "states": {
            "title": "States",
            "type": "array",
            "description": "Which official state portals to scan: <code>IL</code> Illinois BidBuy, <code>MA</code> COMMBUYS (Massachusetts state agencies plus cities, towns and authorities), <code>NJ</code> NJSTART, <code>OR</code> OregonBuys, <code>NV</code> NevadaEPro. Leave empty to scan all five.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Keep bids whose title, bid number or alternate ID contains ANY of these (word start, case-insensitive), e.g. \"software\", \"roof\", \"janitorial\". Empty = all open bids.",
            "items": {
              "type": "string"
            }
          },
          "searchFullText": {
            "title": "Also match keywords in the bid description and line items",
            "type": "boolean",
            "description": "Matches keywords against the bulletin description, line-item text and category names too. Finds more, but reads every bid's detail page, so a big state takes a few minutes.",
            "default": false
          },
          "excludeKeywords": {
            "title": "Exclude title keywords",
            "type": "array",
            "description": "Drop bids whose title contains any of these, e.g. \"farm lease\", \"change order notice\", \"emergency notice\".",
            "items": {
              "type": "string"
            }
          },
          "organizationContains": {
            "title": "Organization contains",
            "type": "array",
            "description": "Keep only bids from agencies whose name contains ANY of these, e.g. \"transportation\", \"health\", \"university\", \"city of\".",
            "items": {
              "type": "string"
            }
          },
          "categoryCodes": {
            "title": "Category codes (NIGP / UNSPSC)",
            "type": "array",
            "description": "Keep bids with a line item in these commodity codes. Prefix match: <code>920</code> = all NIGP 920 IT services, <code>958-85</code> = one class. COMMBUYS uses its own UNSPSC-style codes such as <code>80-10</code>. Reads every bid's detail page.",
            "items": {
              "type": "string"
            }
          },
          "dueWithinDays": {
            "title": "Due within (days)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only bids whose opening date (deadline) is in the next N days. 0 = any.",
            "default": 0
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only bids made available in the last N days. 0 = any. Reads detail pages.",
            "default": 0
          },
          "includeDetails": {
            "title": "Include bid details",
            "type": "boolean",
            "description": "Adds posted date, department, buyer contact (name, email, phone as published), pre-bid conference, bulletin description, NIGP/UNSPSC codes, line items, attachment names and links, amendments, contract dates and state-specific fields. One extra request per bid. Same price either way.",
            "default": true
          },
          "onlyNew": {
            "title": "Only new bids (since the last run)",
            "type": "boolean",
            "description": "Remembers bids already delivered for this same input and returns only new ones. Schedule it daily for a bid alert feed. Each record gets <code>changeType</code>.",
            "default": false
          },
          "alertOnNewAmendments": {
            "title": "Also re-send a bid when a new amendment is posted",
            "type": "boolean",
            "description": "With only-new on: a bid you already got comes back once with <code>changeType: \"new_amendment\"</code> when the state adds an amendment. Needs every matching bid's detail page on every run, so it is slower.",
            "default": false
          },
          "stateKey": {
            "title": "Only-new memory name (optional)",
            "type": "string",
            "description": "Name for the only-new memory. Leave empty to use one automatically per set of states. Set it to keep separate memories for different keyword tasks, or to start fresh."
          },
          "bidUrls": {
            "title": "Single bid links (optional)",
            "type": "array",
            "description": "Bid detail links from any of the five portals, e.g. <code>https://www.bidbuy.illinois.gov/bso/external/bidDetail.sda?docId=27-422DNR-DIREC-B-54580&external=true</code>. Each returns that bid with full details.",
            "items": {
              "type": "string"
            }
          },
          "maxBidsPerState": {
            "title": "Max bids per state",
            "minimum": 0,
            "type": "integer",
            "description": "Soonest deadline first. 0 = no limit.",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Parallel detail requests",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "1 to 4. The run also stays under 90 requests per 5 minutes overall to respect the portals’ rate limit.",
            "default": 2
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}