SUPPLY CHAIN INFRASTRUCTURE

The universal translator for a global supply chain

ZeroManual Entry
99.9%Extraction Accuracy
UniversalFormat Support

Turn Bills of Lading, Customs Forms, and Rate Cons (from PDFs and faxes, to EDI) into rigid, standardized data. Connect your fragmented supply chain with a single, deterministic translation layer.

Start Automating

Used by industry leaders

Ply
Fleetio
Alvys

Automated Intake & Creation

Automatically create shipments in your TMS/ERP from emailed Rate Cons and Booking Confirmations. Capture weights, dimensions, and PRO numbers instantly.

Customs & Compliance

Extract HS Codes, Country of Origin, and Values from Commercial Invoices. Validate against your master parts catalog to prevent customs delays.

Bill of Lading Reconciliation

Match Carrier BOLs against your original Booking Request. Automatically flag discrepancies in container count, weight, or seal numbers.

Standardize the Chaos

Your supply chain runs on PDFs, scans, and emails from thousands of different forwarders and carriers. bem acts as the translation layer, ingesting any format and outputting the rigid EDI or JSON your ERP needs.

Unstructured Input
Extracted, enriched, and validated
Evals: 99.0% Passing
{
"isTruckLoaded":true,
"incidentReport":{
"summary":"A pallet of goods fell over due to a sudden stop or break, scattering boxes on the floor of the truck. Some boxes appear to be damaged.",
"damageToGoods":true
},
"environmentType":"Refrigerated",
"numberOfPallets":10,
Enriched automatically from collection
"enrichedResponse":[
[
{
"data":{
"code":"DMG-003",
"title":"Goods Damaged in Transit",
"description":"Goods being transported have been damaged due to improper handling, shifting during transit, or environmental factors. Requires assessment of damage, potential claim filing, and investigation into the cause. Example: A pallet of fragile glass jars shifted during a sharp turn, causing several jars to break and spill their contents."
}
}
]
],
"goodsDescription":"Palletized Boxes",
"locationDescription":"Refrigerated Truck",
"suddenBreaksOrStops":true
}

Unlock Logistics Intelligence

Stop treating documents as just paperwork. They are the source of truth for your supply chain performance. bem extracts the hidden data to drive strategic decisions.

Carrier Scorecarding

Extract "Arrival Dates" from Notices and compare them against the original "ETA" from Booking Confirmations. Automatically track carrier reliability and on-time performance.

Rate Benchmarking

Unlock line-item cost data from PDF Rate Cons and Invoices. Aggregate historical lane pricing to identify overspending and negotiate better contracts.

SKU-Level Visibility

Don't wait for goods receipt. Ingest Packing Lists at the point of origin (factory) to know exactly which SKUs are in which container, enabling dynamic inventory allocation.

Atomic Primitives for Supply Chain

Logistics workflows are messy. You get 50-page PDFs containing Mixed Invoices, PLs, and Certs. bem decomposes this chaos into atomic, optimizable steps.

01. INGEST

Ingest & Split

Forward emails or upload massive PDF packets. bem automatically splits the PDF into individual documents (BOL, Invoice, Cert of Origin).

02. CLASSIFY

Identify

Semantic classification determines document type and language. Routes "Commercial Invoice (Chinese)" to the APAC workflow.

03. EXTRACT

Extract

Layout-aware models extract tabular data (SKUs, Weights) and key-value pairs (Vessel Name, ETA) into your rigid schema.

04. ENRICH

Hydrate

Convert fuzzy text ("Elec Parts") to specific HS Codes (8542.31). Match "Yantian Port" to UN/LOCODE "CNYTN".

05. SYNC

TMS Sync

Post clean JSON/EDI to your TMS, WMS, or ERP. Trigger events for "Shipment Created" or "Customs Ready".

Logistics Exception Queue
[BOL Preview Area]
"Ho Chi Minh Cat Lai"
VNSGN (Saigon)

New Alias Saved

Future docs with "Cat Lai" will auto-map to VNSGN.

ADAPTIVE INFRASTRUCTURE

New carrier? New format?
No problem.

Logistics is constantly changing. New forwarders, new layouts, new languages. bem adapts in real-time.

  • Alias Learning: Teach the model once that "SZX" means "Shenzhen", and it remembers forever across all documents.
  • Layout Agnostic: Our vision models don't rely on templates/Zonal OCR. They read like a human, understanding that "Shipper" is the entity at the top left, regardless of font or position.

Integrates with your ERP & TMS

Whether you use SAP, Oracle, Wisetech (CargoWise), or a custom TMS, bem pushes clean, enriched JSON directly to your API.

1. The Contract: Define Schema

POST /v2/functions
const bolSchema = {
  type: "object",
  properties: {
    shipper_name: { type: "string" },
    vessel_name: { type: "string" },
    containers: {
      type: "array",
      items: {
        type: "object",
        properties: {
          container_id: { type: "string" },
          seal_number: { type: "string" }
        },
        required: ["container_id"]
      }
    }
  },
  required: ["shipper_name", "containers"]
};

Define the exact structure your TMS expects. bem validates every extraction against this JSON schema before it ever reaches your system.

2. The Context: Hydrate Data

POST /v2/functions (Enrich)
// Lookup Port Codes from UN/LOCODE Master
{
  "functionName": "port-enricher",
  "type": "enrich",
  "config": {
    "steps": [
      {
        "sourceField": "port_of_loading", 
        "collectionName": "un-locode-master",
        "targetField": "normalized_locode", 
        "searchMode": "hybrid",
        "topK": 1
      }
    ]
  }
}

Don't just extract text. Hydrate it. Automatically look up UN/LOCODEs, HS Codes, and Vendor IDs from your own master data collections.

3. The Graph: Compose Workflow

POST /v2/workflows
{
  "name": "process-inbound-bol",
  "relationships": [
    {
      "sourceFunction": { "name": "bol-extractor", "versionNum": 1 },
      "destinationFunction": { "name": "port-enricher", "versionNum": 1 }
    }
  ]
}

Chain functions together safely. Pass the output of your BOL Extractor directly into the Port Enricher and then to your TMS Sync function.

4. The Loop: Event-Driven

POST /v2/calls
// Fire and forget transformation
await fetch("https://api.bem.ai/v2/calls", {
  method: "POST",
  body: JSON.stringify({
    calls: [{
        workflowName: "process-inbound-bol",
        callReferenceID: "shp_8892_ref", 
        input: {
            singleFile: {
                inputType: "pdf",
                inputContent: "base64_encoded..." 
            }
        }
    }]
  })
});

Push documents asynchronously. We handle the queuing, retries, and scale. Your webhook receives the final payload when ready.

Enterprise-Grade Security

Your financial data is sensitive. We treat it that way. Deploy bem in your own VPC or use our zero-retention cloud environment.

View Security Specs