{
  "openapi": "3.0.1",
  "info": {
    "title": "🏭 EPA ECHO Enforcement Scraper",
    "description": "Extract official environmental compliance records, legal case histories, and penalty fines from the EPA ECHO database for ESG risk models.",
    "version": "0.1",
    "x-build-id": "Btah1TvpG06BGBJtb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/taroyamada~epa-enforcement-digest/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-taroyamada-epa-enforcement-digest",
        "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/taroyamada~epa-enforcement-digest/runs": {
      "post": {
        "operationId": "runs-sync-taroyamada-epa-enforcement-digest",
        "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/taroyamada~epa-enforcement-digest/run-sync": {
      "post": {
        "operationId": "run-sync-taroyamada-epa-enforcement-digest",
        "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": [
          "targets"
        ],
        "properties": {
          "targets": {
            "title": "Targets (one digest row each)",
            "type": "array",
            "description": "List of watched facilities, company footprints, or case feeds. Shared target-level selectors (frsId, facilityName, state, city, region) are inherited by the individual ECHO surfaces unless overridden.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "title": "Target ID",
                  "type": "string",
                  "description": "Stable identifier for snapshots and output rows."
                },
                "name": {
                  "title": "Target name",
                  "type": "string",
                  "description": "Human-readable label in the digest output."
                },
                "criticality": {
                  "title": "Criticality",
                  "type": "string",
                  "enum": [
                    "mission_critical",
                    "high",
                    "standard",
                    "low"
                  ],
                  "description": "Controls severity escalation and follow-up thresholds."
                },
                "owner": {
                  "title": "Owner",
                  "type": "string",
                  "description": "Team or person responsible for follow-up."
                },
                "tags": {
                  "title": "Tags",
                  "type": "string",
                  "description": "Comma-separated tags for routing and filtering."
                },
                "frsId": {
                  "title": "Shared FRS ID",
                  "type": "string",
                  "description": "Preferred 12-digit FRS identifier for precise facility/company tracking. Shared by facilitySearch/complianceScreener/caseSearch unless overridden."
                },
                "facilityName": {
                  "title": "Shared facility or company name",
                  "type": "string",
                  "description": "Facility or company name inherited by facilitySearch/complianceScreener surfaces unless overridden."
                },
                "state": {
                  "title": "Shared state",
                  "type": "string",
                  "description": "USPS state code inherited by facilitySearch/complianceScreener/caseSearch unless overridden."
                },
                "city": {
                  "title": "Shared city",
                  "type": "string",
                  "description": "City inherited by facilitySearch/caseSearch unless overridden."
                },
                "region": {
                  "title": "Shared EPA region",
                  "type": "string",
                  "description": "EPA region inherited by facilitySearch/complianceScreener/caseSearch unless overridden."
                },
                "facilitySearch": {
                  "title": "All-media facility search surface",
                  "type": "object",
                  "description": "Optional ECHO all-media facility search surface. Inherits frsId/facilityName/state/city/region from the target unless overridden.",
                  "properties": {
                    "id": {
                      "title": "Surface ID",
                      "type": "string",
                      "description": "Optional override identifier for this facility-search surface."
                    },
                    "name": {
                      "title": "Surface name",
                      "type": "string",
                      "description": "Optional display label for this facility-search surface."
                    },
                    "frsId": {
                      "title": "FRS ID",
                      "type": "string",
                      "description": "Facility Registry Service identifier used for precise facility matching."
                    },
                    "facilityName": {
                      "title": "Facility name",
                      "type": "string",
                      "description": "Facility or company name passed to the ECHO all-media facility search."
                    },
                    "state": {
                      "title": "State",
                      "type": "string",
                      "description": "USPS state code used for facility filtering."
                    },
                    "city": {
                      "title": "City",
                      "type": "string",
                      "description": "City filter used for facility search narrowing."
                    },
                    "region": {
                      "title": "EPA region",
                      "type": "string",
                      "description": "EPA region filter used for facility search narrowing."
                    },
                    "quickSearch": {
                      "title": "Quick search term",
                      "type": "string",
                      "description": "Optional ECHO quick-search term."
                    },
                    "media": {
                      "title": "Media codes",
                      "type": "string",
                      "description": "Comma-separated media codes such as A, C, R, S, T."
                    },
                    "nameMatchMode": {
                      "title": "Name match mode",
                      "type": "string",
                      "enum": [
                        "CONTAINS",
                        "EXACT",
                        "BEGINS",
                        "ALL"
                      ],
                      "description": "Facility name search mode when facilityName is used."
                    },
                    "majorOnly": {
                      "title": "Major facilities only",
                      "type": "boolean",
                      "description": "Restrict to major facilities only."
                    },
                    "evidenceLimit": {
                      "title": "Facility evidence limit",
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 25,
                      "description": "How many top facility evidence rows to keep."
                    }
                  }
                },
                "complianceScreener": {
                  "title": "Corporate compliance screener surface",
                  "type": "object",
                  "description": "Optional ECHO compliance screener surface. Good for company footprints or multi-facility facility-name watches.",
                  "properties": {
                    "id": {
                      "title": "Surface ID",
                      "type": "string",
                      "description": "Optional override identifier for this compliance-screener surface."
                    },
                    "name": {
                      "title": "Surface name",
                      "type": "string",
                      "description": "Optional display label for this compliance-screener surface."
                    },
                    "frsId": {
                      "title": "FRS ID",
                      "type": "string",
                      "description": "Facility Registry Service identifier used for precise screener matching."
                    },
                    "facilityName": {
                      "title": "Facility name",
                      "type": "string",
                      "description": "Facility or company name passed to the compliance screener."
                    },
                    "state": {
                      "title": "State",
                      "type": "string",
                      "description": "USPS state code used for compliance screener narrowing."
                    },
                    "region": {
                      "title": "EPA region",
                      "type": "string",
                      "description": "EPA region filter used for compliance screener narrowing."
                    },
                    "nameMatchMode": {
                      "title": "Name match mode",
                      "type": "string",
                      "enum": [
                        "CONTAINS",
                        "EXACT",
                        "BEGINS",
                        "ALL"
                      ],
                      "description": "Facility/company name search mode when facilityName is provided."
                    },
                    "years": {
                      "title": "Settlement lookback years",
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 10,
                      "description": "Settlement lookback window used by the screener service."
                    },
                    "activeOnly": {
                      "title": "Active facilities only",
                      "type": "boolean",
                      "description": "When true, only active facilities are screened."
                    },
                    "evidenceLimit": {
                      "title": "Screener evidence limit",
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 25,
                      "description": "How many top screener rows to keep from the first page."
                    }
                  }
                },
                "caseSearch": {
                  "title": "Enforcement case search surface",
                  "type": "object",
                  "description": "Optional EPA enforcement case surface. Best for specific facility IDs or narrow state/region date windows.",
                  "properties": {
                    "id": {
                      "title": "Surface ID",
                      "type": "string",
                      "description": "Optional override identifier for this case-search surface."
                    },
                    "name": {
                      "title": "Surface name",
                      "type": "string",
                      "description": "Optional display label for this case-search surface."
                    },
                    "facilityId": {
                      "title": "Facility ID",
                      "type": "string",
                      "description": "Facility registration identifier or inherited frsId when applicable."
                    },
                    "state": {
                      "title": "State",
                      "type": "string",
                      "description": "USPS state code used for enforcement case filtering."
                    },
                    "region": {
                      "title": "EPA region",
                      "type": "string",
                      "description": "EPA region filter used for enforcement case searches."
                    },
                    "facilityCity": {
                      "title": "Facility city",
                      "type": "string",
                      "description": "Facility city filter used for case narrowing."
                    },
                    "facilityZip": {
                      "title": "Facility ZIP",
                      "type": "string",
                      "description": "Facility ZIP/postal code filter used for case narrowing."
                    },
                    "caseCategory": {
                      "title": "Case categories",
                      "type": "string",
                      "description": "Comma-separated case categories such as AFR, AIF, JDC."
                    },
                    "caseStatus": {
                      "title": "Case status codes",
                      "type": "string",
                      "description": "Comma-separated case status codes."
                    },
                    "violationTypes": {
                      "title": "Violation type codes",
                      "type": "string",
                      "description": "Comma-separated case violation codes."
                    },
                    "fromDate": {
                      "title": "From date",
                      "type": "string",
                      "description": "Milestone start date. MM/DD/YYYY or ISO accepted."
                    },
                    "toDate": {
                      "title": "To date",
                      "type": "string",
                      "description": "Milestone end date. MM/DD/YYYY or ISO accepted."
                    },
                    "caseNumber": {
                      "title": "Case number",
                      "type": "string",
                      "description": "Specific case number if known."
                    },
                    "caseName": {
                      "title": "Case name",
                      "type": "string",
                      "description": "Case name filter. Requires caseNameType when used."
                    },
                    "caseNameType": {
                      "title": "Case name modifier",
                      "type": "string",
                      "description": "Case name modifier accepted by ECHO when caseName is used."
                    },
                    "querySet": {
                      "title": "Query set",
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 70000,
                      "description": "Optional ECHO queryset override for large but still acceptable feeds."
                    },
                    "evidenceLimit": {
                      "title": "Case evidence limit",
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 25,
                      "description": "How many case rows to keep from the first page."
                    }
                  }
                }
              }
            }
          },
          "requestTimeoutSeconds": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Maximum time to wait for one EPA ECHO web-service request.",
            "default": 30
          },
          "userAgent": {
            "title": "Custom User-Agent",
            "type": "string",
            "description": "Optional custom User-Agent string for public EPA ECHO requests."
          },
          "delivery": {
            "title": "Delivery mode",
            "enum": [
              "dataset",
              "webhook",
              "email"
            ],
            "type": "string",
            "description": "dataset writes selected target rows to the dataset. webhook posts the digest JSON. email is reserved for a future path.",
            "default": "dataset"
          },
          "datasetMode": {
            "title": "Dataset mode",
            "enum": [
              "action_needed",
              "changes_only",
              "all"
            ],
            "type": "string",
            "description": "Controls which target rows are persisted: action-needed only, changed/initial/partial/error rows, or every row.",
            "default": "changes_only"
          },
          "webhookUrl": {
            "title": "Webhook URL",
            "type": "string",
            "description": "POST destination when delivery=webhook."
          },
          "notifyOnNoChange": {
            "title": "Notify even if nothing changed",
            "type": "boolean",
            "description": "When true, webhook delivery still fires even when no selected target changed.",
            "default": false
          },
          "snapshotKey": {
            "title": "Snapshot key",
            "type": "string",
            "description": "Stable key used to load and save prior ECHO surface snapshots between recurring runs.",
            "default": "epa-enforcement-digest-snapshots"
          },
          "diffMode": {
            "title": "Diff mode",
            "enum": [
              "line_summary",
              "hash_only"
            ],
            "type": "string",
            "description": "line_summary keeps compact added/removed snapshot lines. hash_only only marks changed or unchanged.",
            "default": "line_summary"
          },
          "summaryMaxLines": {
            "title": "Max diff summary lines",
            "minimum": 5,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum added and removed snapshot lines kept per surface.",
            "default": 12
          },
          "maxEvidenceItems": {
            "title": "Global evidence limit",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "Upper bound for top facilities/cases retained per surface unless overridden by a surface-level evidenceLimit.",
            "default": 5
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many watch targets may be processed in parallel.",
            "default": 2
          },
          "batchDelayMs": {
            "title": "Inter-batch delay (ms)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Delay between target batches to soften load on EPA ECHO.",
            "default": 500
          },
          "dryRun": {
            "title": "Dry run",
            "type": "boolean",
            "description": "If true, the actor skips snapshot writes and remote delivery while still producing local output.",
            "default": false
          },
          "nowIso": {
            "title": "Override current time (ISO)",
            "type": "string",
            "description": "Optional ISO timestamp override for deterministic fixture tests or proof snapshots."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}