FMC Oti Scraper avatar

FMC Oti Scraper

Pricing

from $10.20 / 1,000 results

Go to Apify Store
FMC Oti Scraper

FMC Oti Scraper

The full FMC registry of licensed Ocean Transportation Intermediaries: every US and foreign NVOCC and ocean freight forwarder, with license number, renewal date, surety bond and amount, qualifying individuals and address. Filter for compliance and partner vetting, or look up an OTI by number.

Pricing

from $10.20 / 1,000 results

Rating

0.0

(0)

Developer

Norm Data

Norm Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Norm Data

FMC OTI Scraper

Get the full FMC registry of licensed Ocean Transportation Intermediaries with no API key and no login. Every NVOCC and ocean freight forwarder, US and foreign, that is licensed or bonded with the Federal Maritime Commission: about 9,800 entries with license number, license renewal date, surety bond company and amount, qualifying individuals, trade names, country and full address. Built for OTI compliance and partner vetting, freight-forwarder and NVOCC due diligence, KYB, B2B lead generation and surety-market research.

Here is one real row:

{
"organization_number": "027971",
"name": "CROWLEY GOVERNMENT SERVICES, INC.",
"dba_names": [],
"oti_types": ["NVOCC", "Ocean Freight Forwarder"],
"is_nvocc": true,
"is_freight_forwarder": true,
"license_number": "027971",
"is_licensed": true,
"renewal_date": "2028-01-31",
"days_to_renewal": 507,
"renewal_status": "current",
"country": "UNITED STATES",
"is_us_based": true,
"is_foreign_nvocc": false,
"address": "9487 REGENCY SQUARE BLVD., JACKSONVILLE, FL, 32225, UNITED STATES",
"state": "FL",
"phone": "(904) 727-2200",
"nvocc_bond": {
"surety": "LIBERTY MUTUAL INSURANCE COMPANY",
"bond_number": "190044893",
"amount": 75000,
"effective_date": "2020-05-07"
},
"freight_forwarder_bond": {
"surety": "LIBERTY MUTUAL INSURANCE COMPANY",
"bond_number": "190042466",
"amount": 50000,
"effective_date": "2019-04-01"
},
"bond_amount_total": 125000,
"has_bond_on_file": true,
"primary_surety": "LIBERTY MUTUAL INSURANCE COMPANY",
"qualifying_individual": "RENE CORMIER",
"qualifying_individuals": [{ "name": "RENE CORMIER", "title": "OTI COMPLIANCE OFFICER" }],
"fmc_oti_list_url": "https://www.fmc.gov/licensing-and-certification/",
"scraped_at": "2026-09-10T19:23:39.213Z"
}

What it does

Reads the full FMC list of licensed and bonded Ocean Transportation Intermediaries in one pass, then normalizes every entry into a flat row. Two modes:

  • Search filters the registry into a list: by name, OTI type, US state, country, US against foreign, city, surety company, qualifying individual, bond amount, or license renewal date.
  • Look up resolves exact FMC organization numbers, license numbers, or company names, one row per identifier. An identifier that does not resolve comes back as an error row.

Missing source values are returned as null, never invented.

Why this scraper

  • Surety bond company and amount, on every row. The NVOCC bond and the forwarder bond, each with its surety company, bond number, amount and effective date. This is the field a party vetting an intermediary actually needs, and no other Apify actor exposes it.
  • License renewal tracking. renewal_date, days_to_renewal and a renewal_status of current, due_soon or overdue, so you can build an expiring-license watch list in one run.
  • The foreign NVOCC angle. is_foreign_nvocc and unlicensedOnly isolate non-US NVOCCs, the group the FMC advises US shippers and forwarders to check most carefully, and flags the bonded-only ones that hold no FMC license.
  • Qualifying individuals. The named people the FMC holds responsible for each licensed OTI, with their titles, not just a company name.
  • Complete in one request. The whole registry, about 9,800 entries, comes back in one keyless request. A full run finishes in well under a minute.
  • No API key, no login, no browser. Reads only what the FMC publishes.

How it compares

CapabilityThis actorOther FMC / OTI data on Apify
Full licensed OTI registry, one row per intermediaryyesrare
NVOCC and ocean freight forwarder in one datasetyesno
Surety bond company + amount + effective dateyesno
License renewal date + overdue flagyesno
Foreign vs US, foreign-NVOCC and unlicensed filtersyesno
Qualifying individuals with titlesyesno
Trade names (DBA)yesno
Look up by organization or license numberyesno
Declared dataset schema + free-plan previewyesrare

Use cases

  • OTI compliance and partner vetting. Before you tender cargo to an NVOCC or forwarder, confirm it is licensed or bonded, read its bond amount and surety, and see who its qualifying individual is.
  • KYB and onboarding. Screen a counterparty against the federal registry and keep the license number, bond and address on file.
  • Expiring-license monitoring. Pull every OTI whose renewal is due within your window, or already overdue, for a renewal-outreach or risk list.
  • B2B lead generation. Build a targeted list of NVOCCs or forwarders by state, country or size of bond, with phone and officer names.
  • Surety and insurance market research. Rank surety companies by how many OTI bonds they write and for what amounts.
  • Freight-tech and TMS enrichment. Attach FMC license status and bond data to carrier and vendor records.

Quickstart

Search: NVOCCs in Florida whose license renewal is due within the next 180 days.

{
"mode": "search",
"state": ["FL"],
"otiType": "nvocc",
"renewalDueInDays": 180,
"maxItems": 100
}

Foreign NVOCCs with a bond on file:

{ "mode": "search", "foreignNvoccOnly": true, "hasBond": true, "maxItems": 500 }

Every OTI bonded by one surety company:

{ "mode": "search", "suretyCompany": "Avalon Risk Management", "maxItems": 1000 }

Look up a batch:

{ "mode": "lookup", "identifiers": ["027971", "019738", "CROWLEY"] }

Input reference

FieldApplies toDescription
maxItemsallCeiling on rows written.
modeallsearch or lookup.
namesearchLegal or trade name contains this text.
otiTypesearchany, nvocc, freight_forwarder, or both.
statesearchTwo-letter US state code(s).
countrysearchFull country name(s), e.g. CHINA, UNITED STATES.
basedInsearchany, us, or foreign.
citysearchCity contains this text.
foreignNvoccOnlysearchOnly non-US NVOCCs.
unlicensedOnlysearchOnly non-US NVOCCs that hold no FMC license (bonded only).
suretyCompanysearchNVOCC or forwarder bond surety company contains this text.
qualifyingIndividualsearchA named qualifying individual contains this text.
hasBondsearchtrue for OTIs with a bond amount on file, false for those without.
minBondAmount / maxBondAmountsearchCombined bond amount range in USD.
renewalBefore / renewalAftersearchLicense renewal-date window (ISO date).
renewalDueInDayssearchRenewal due within this many days, including any already overdue.
identifierslookupOrganization numbers, license numbers, or company names.

Output reference (selected)

FieldDescription
organization_numberThe FMC organization number.
name / dba_namesLegal name and registered trade names.
oti_types / is_nvocc / is_freight_forwarderIntermediary type.
license_number / is_licensedLicense number, and whether a license is held (false for bonded-only foreign NVOCCs).
renewal_date / days_to_renewal / renewal_statusLicense renewal timing (current, due_soon, overdue).
country / is_us_based / is_foreign_nvoccLocation and the foreign-NVOCC flag.
street_1 / street_2 / city / state / zip / address / phone / faxContact.
nvocc_bond / freight_forwarder_bondBond object: surety, bond_number, amount, effective_date.
bond_amount_total / has_bond_on_file / primary_suretyBond rollup.
qualifying_individual / qualifying_individualsThe named responsible people and titles.
query / errorSet on an unresolved look-up identifier row.
fmc_oti_list_urlThe FMC's public OTI list page.
scraped_atISO 8601 collection timestamp.

Run via API and CLI

curl -X POST "https://api.apify.com/v2/acts/USERNAME~fmc-oti-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"mode":"lookup","identifiers":["027971"]}'
$apify call USERNAME/fmc-oti-scraper --input '{"mode":"search","foreignNvoccOnly":true,"maxItems":1000}'

Fetch results

curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"

Billing and limits

  • Pay per result. Billed per OTI row written.
  • No charge on failure. A run that produces zero rows fails with a message and is not billed.
  • An unresolved look-up identifier still writes one error: "not found" row and is billed as a base row.
  • Free Apify plans run the built-in 10-row sample only.
  • The whole registry comes back in a single keyless request, so a full run of every OTI finishes in well under a minute. There is no pagination.

FAQ and troubleshooting

Do I need an API key? No. The FMC OTI list is public, with no key and no login.

Why did my run return zero rows? No OTI matched the filters. Loosen them or widen the date and amount ranges. A zero-row run fails and is not billed.

Why is license_number null for some entries? Non-US NVOCCs may operate bonded without an FMC license. Those show is_licensed: false and a null license number. That is correct, not missing data.

Why is renewal_status overdue for an active OTI? The entry is still on the active list, but the renewal date on file has passed. It is a signal to check the license, not proof it has lapsed.

Why are some names or countries clearly inconsistent? A small number of entries carry data the FMC recorded that way, for example a foreign company with UNITED STATES in the nation field. The Actor reports the source values as they are and does not correct them.

How current is the data? The FMC refreshes the OTI list on its own schedule, roughly monthly. It is not real time.

Is this an official FMC tool? No. Independent, not affiliated with the Federal Maritime Commission. It reads only data the Commission publishes.

Local development

bun install
bun test # offline: parsing, normalisation, input logic
bun run src/main.ts # reads storage/key_value_stores/default/INPUT.json
bun scripts/verify-live.mjs # hits www2.fmc.gov directly, checks every mode