FHWA National Bridge Inventory Scraper avatar

FHWA National Bridge Inventory Scraper

Pricing

from $0.04 / 1,000 bridge record extracteds

Go to Apify Store
FHWA National Bridge Inventory Scraper

FHWA National Bridge Inventory Scraper

Extract FHWA InfoBridge / National Bridge Inventory bridge records by state, owner, condition, or exact bridge ID.

Pricing

from $0.04 / 1,000 bridge record extracteds

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Extract bridge records from the public FHWA InfoBridge / National Bridge Inventory map data endpoints.

What does this FHWA National Bridge Inventory Scraper do?

The FHWA National Bridge Inventory Scraper turns public InfoBridge bridge records into a clean Apify dataset.

It can scan bridges by state code or retrieve exact InfoBridge bridge IDs.

The actor is designed for infrastructure, civil engineering, insurance, and GIS workflows.

It uses HTTP requests against FHWA public endpoints and does not require login.

Who is it for?

  • 🏗️ Civil engineering firms monitoring bridge assets.
  • 🗺️ GIS teams enriching public infrastructure layers.
  • 🏛️ Government vendors researching bridge owners and agencies.
  • 🛡️ Insurance and infrastructure risk teams screening bridge age and condition.
  • 📊 Data teams building recurring National Bridge Inventory extracts.

Why use it?

InfoBridge is powerful, but repeatable extraction from map workflows can be slow.

This actor gives you structured records with reproducible source URLs.

You can schedule it, call it through the API, and export JSON, CSV, Excel, or Parquet from Apify.

Data source

The actor uses FHWA LTBP InfoBridge.

InfoBridge is a public national repository for bridge performance and National Bridge Inventory data.

The actor currently uses the public map and bridge data endpoints visible from InfoBridge.

Data fields

FieldDescription
bridgeIdInfoBridge NEW_BRIDGE_ID
bridgeYearlyIdInfoBridge yearly bridge record ID
structureNumberNBI structure number
stateCodeNumeric FHWA/NBI state code
stateNameState name
ownerAgencyOwning agency text
yearBuiltConstruction year
structureLengthStructure length from InfoBridge
mainSpanMaterialsMain span material code and label
mainSpanDesignMain span design code and label
bridgeConditionG/F/P condition code when requested
conditionLabelGood, Fair, or Poor label
detailUrlPublic InfoBridge detail page
sourceUrlPublic JSON endpoint used by the actor
scrapedAtISO timestamp

How much does it cost to scrape FHWA National Bridge Inventory data?

This actor uses pay-per-event pricing.

You pay a small start fee and then a per-record fee for each saved bridge item.

The default input is intentionally small enough to make the first run inexpensive.

Input overview

The most common input is a state code and a maximum number of bridge records.

You can also pass exact InfoBridge bridge IDs when you already know the assets to monitor.

Input fields

  • stateCodes — numeric FHWA/NBI state codes, such as 1 for Alabama or 48 for Texas.
  • bridgeIds — exact InfoBridge NEW_BRIDGE_ID values.
  • maxItems — maximum number of records to save.
  • bridgeCondition — optional Good/Fair/Poor filter.
  • ownerContains — optional owner agency text filter.
  • includeCondition — fetch condition code for emitted records.
  • requestDelayMs — polite request delay for InfoBridge.

Example input: first 100 Alabama bridges

{
"stateCodes": [1],
"maxItems": 100,
"includeCondition": true,
"requestDelayMs": 120
}

Example input: poor-condition bridges

{
"stateCodes": [1],
"maxItems": 250,
"bridgeCondition": "Poor",
"includeCondition": true
}

Example input: exact bridge IDs

{
"bridgeIds": [1, 2, 1000],
"maxItems": 3,
"includeCondition": true
}

Example output

{
"bridgeId": 1,
"bridgeYearlyId": 26002063,
"structureNumber": "DAPAMCRED0VBC77",
"stateCode": 1,
"stateName": "Alabama",
"ownerAgency": "74-Army",
"yearBuilt": 1975,
"structureLength": 23.3,
"mainSpanMaterials": "3-Steel",
"mainSpanDesign": "19-Culvert",
"bridgeCondition": "P",
"conditionLabel": "Poor",
"detailUrl": "https://infobridge.fhwa.dot.gov/Data/BridgeDetail/26002063",
"sourceUrl": "https://infobridge.fhwa.dot.gov/Data/GetMapBridgeData?BridgeID=1",
"scrapedAt": "2026-07-06T00:00:00.000Z"
}

How to run it

  1. Open the actor on Apify.
  2. Choose state codes or exact bridge IDs.
  3. Set maxItems to the number of records you need.
  4. Optionally filter by condition or owner agency.
  5. Run the actor.
  6. Download the dataset in your preferred format.

State code tips

The input uses numeric FHWA/NBI state codes.

Examples include Alabama 1, California 6, Florida 12, New York 36, and Texas 48.

Use exact bridgeIds when you need deterministic repeat monitoring of known bridges.

Condition filter tips

The actor maps InfoBridge condition codes to human-readable labels.

  • G means Good.
  • F means Fair.
  • P means Poor.

Use bridgeCondition when you only need one condition class.

Owner filter tips

ownerContains is a case-insensitive substring filter.

Examples include County Highway Agency, State Highway Agency, or Army.

The filter is applied after a bridge record is fetched.

Integrations

Use the actor with Apify datasets, webhooks, schedules, and API clients.

Common workflows include:

  • Scheduled bridge-condition monitoring.
  • GIS layer enrichment.
  • Infrastructure sales lead lists by owner agency.
  • Insurance risk screening by bridge age and condition.
  • Data warehouse imports for public-sector analytics.

API usage: Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/fhwa-national-bridge-inventory-scraper').call({
stateCodes: [1],
maxItems: 100
});
console.log(run.defaultDatasetId);

API usage: Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/fhwa-national-bridge-inventory-scraper').call({
'stateCodes': [1],
'maxItems': 100,
})
print(run['defaultDatasetId'])

API usage: cURL

curl -X POST "https://api.apify.com/v2/acts/automation-lab~fhwa-national-bridge-inventory-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"stateCodes":[1],"maxItems":100}'

MCP usage

Connect through Apify MCP to use this actor from AI tools such as Claude Desktop, Claude Code, and other MCP-compatible clients.

MCP URL:

https://mcp.apify.com/?tools=automation-lab/fhwa-national-bridge-inventory-scraper

Claude Code setup:

$claude mcp add apify https://mcp.apify.com/?tools=automation-lab/fhwa-national-bridge-inventory-scraper

Claude Desktop JSON configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=automation-lab/fhwa-national-bridge-inventory-scraper"
}
}
}

Example prompts:

  • "Get 100 Alabama bridge records from FHWA InfoBridge."
  • "Find poor-condition bridge records for state code 1."
  • "Export records for these exact InfoBridge bridge IDs."

Performance and politeness

The actor uses conservative HTTP requests.

InfoBridge exposes rate-limit headers, so the actor includes a request delay setting.

Avoid unnecessarily large runs when a small state or exact bridge list will answer your question.

Current limitations

The lightweight public map endpoint does not expose every NBI field.

The MVP focuses on identity, owner, construction, span, condition, and detail links.

County-level filtering is not included in the current output because it would require a heavier endpoint workflow.

FAQ

Why did my run return no results?

Check that the state code is valid and maxItems is greater than zero.

If you pass exact bridge IDs, confirm they are InfoBridge NEW_BRIDGE_ID values.

Why is my run slow?

Lower maxItems or use exact bridgeIds.

You can also reduce requestDelayMs, but keep it polite for FHWA public infrastructure.

Can it scrape county-level bridge fields?

Not in this first version. The lightweight public map endpoint does not expose county fields, so this actor prioritizes reliable state and exact-ID extraction.

Legality

This actor collects data from a public US government information system.

Use the results responsibly and follow Apify terms and applicable laws.

Do not overload the source website.

Explore other public-data and government-data actors from Automation Lab:

Changelog

  • Initial version: state and exact-ID bridge extraction from FHWA InfoBridge public endpoints.

Support

If you need additional fields such as county, route, or historical condition rows, open an issue on the actor page.

Notes for analysts

The actor includes both detailUrl and sourceUrl to make records auditable.

Use those fields when joining outputs with internal GIS or asset-management systems.