FMC Oti Scraper
Pricing
from $10.20 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share

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
errorrow.
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_renewaland arenewal_statusofcurrent,due_soonoroverdue, so you can build an expiring-license watch list in one run. - The foreign NVOCC angle.
is_foreign_nvoccandunlicensedOnlyisolate 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
| Capability | This actor | Other FMC / OTI data on Apify |
|---|---|---|
| Full licensed OTI registry, one row per intermediary | yes | rare |
| NVOCC and ocean freight forwarder in one dataset | yes | no |
| Surety bond company + amount + effective date | yes | no |
| License renewal date + overdue flag | yes | no |
| Foreign vs US, foreign-NVOCC and unlicensed filters | yes | no |
| Qualifying individuals with titles | yes | no |
| Trade names (DBA) | yes | no |
| Look up by organization or license number | yes | no |
| Declared dataset schema + free-plan preview | yes | rare |
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
| Field | Applies to | Description |
|---|---|---|
maxItems | all | Ceiling on rows written. |
mode | all | search or lookup. |
name | search | Legal or trade name contains this text. |
otiType | search | any, nvocc, freight_forwarder, or both. |
state | search | Two-letter US state code(s). |
country | search | Full country name(s), e.g. CHINA, UNITED STATES. |
basedIn | search | any, us, or foreign. |
city | search | City contains this text. |
foreignNvoccOnly | search | Only non-US NVOCCs. |
unlicensedOnly | search | Only non-US NVOCCs that hold no FMC license (bonded only). |
suretyCompany | search | NVOCC or forwarder bond surety company contains this text. |
qualifyingIndividual | search | A named qualifying individual contains this text. |
hasBond | search | true for OTIs with a bond amount on file, false for those without. |
minBondAmount / maxBondAmount | search | Combined bond amount range in USD. |
renewalBefore / renewalAfter | search | License renewal-date window (ISO date). |
renewalDueInDays | search | Renewal due within this many days, including any already overdue. |
identifiers | lookup | Organization numbers, license numbers, or company names. |
Output reference (selected)
| Field | Description |
|---|---|
organization_number | The FMC organization number. |
name / dba_names | Legal name and registered trade names. |
oti_types / is_nvocc / is_freight_forwarder | Intermediary type. |
license_number / is_licensed | License number, and whether a license is held (false for bonded-only foreign NVOCCs). |
renewal_date / days_to_renewal / renewal_status | License renewal timing (current, due_soon, overdue). |
country / is_us_based / is_foreign_nvocc | Location and the foreign-NVOCC flag. |
street_1 / street_2 / city / state / zip / address / phone / fax | Contact. |
nvocc_bond / freight_forwarder_bond | Bond object: surety, bond_number, amount, effective_date. |
bond_amount_total / has_bond_on_file / primary_surety | Bond rollup. |
qualifying_individual / qualifying_individuals | The named responsible people and titles. |
query / error | Set on an unresolved look-up identifier row. |
fmc_oti_list_url | The FMC's public OTI list page. |
scraped_at | ISO 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 installbun test # offline: parsing, normalisation, input logicbun run src/main.ts # reads storage/key_value_stores/default/INPUT.jsonbun scripts/verify-live.mjs # hits www2.fmc.gov directly, checks every mode