Fiber AI
Search & discovery

Blue-collar job search

Search US trade, warehouse, and service job listings by company, keyword, and location.

We built a separate search for US hourly and trade roles: warehouse, forklift, manufacturing, field service. These are the listings that don't show up well in a LinkedIn-style req search. The results look like what you'd browse on a major job board: title, company, location, pay when the posting lists it, and a URL to the full listing. You don't need an account anywhere.

This is not Job search. That family is structured professional postings (title, seniority, modality, LinkedIn job URL). Blue-collar search is a different contract: keyword + location + company slug, US-only, billed per call.

What it does

  1. Resolve a company (optional) from a name like Caterpillar or Amazon, or a domain like walmart.com, into a companySlug.
  2. Search listings with at least one of companySlug, query, or location.
  3. Read cards — title, company, location, listing URL, optional salary parse, optional estimated post date.
  4. Page with nextPageToken when you searched by company slug.

Typical prompt this answers: "Warehouse worker jobs in Texas" or "open roles at Caterpillar."

Operations

JobOperationHTTPWhen to use
Resolve companyblueCollarResolveCompanyPOST /v1/blue-collar-jobs/resolve-companyTurn a name/domain into companySlug
Search listingsblueCollarJobsSearchPOST /v1/blue-collar-jobs/searchFetch listing cards
Search professional postingsjobPostingSearchPOST /v1/job-searchStructured professional postings, not hourly/trade listings

Rate limits: both blue-collar routes allow 300 requests / minute; professional-posting search follows the standard 120 / minute. Recommended client timeouts: 30s resolve, 60s search. There is no count endpoint — use estimatedJobCount as a rough total only.

Call functions from @fiberai/sdk. Zod request schemas live on @fiberai/sdk/zod.

import {
  blueCollarJobsSearch,
  blueCollarResolveCompany,
} from "@fiberai/sdk";
import type {
  BlueCollarJobsSearchData,
  BlueCollarResolveCompanyData,
} from "@fiberai/sdk";
import {
  zBlueCollarJobsSearchData,
  zBlueCollarResolveCompanyData,
} from "@fiberai/sdk/zod";

const resolveRequest: BlueCollarResolveCompanyData =
  zBlueCollarResolveCompanyData.parse({
    body: {
      apiKey: process.env.FIBER_API_KEY!,
      companyName: "Caterpillar",
      domain: "caterpillar.com",
    },
  });

const resolved: Awaited<ReturnType<typeof blueCollarResolveCompany>> =
  await blueCollarResolveCompany(resolveRequest);

const slug: string | undefined = resolved.data?.output.slug;

const searchRequest: BlueCollarJobsSearchData = zBlueCollarJobsSearchData.parse({
  body: {
    apiKey: process.env.FIBER_API_KEY!,
    companySlug: slug,
    query: "warehouse worker",
    location: "Texas",
  },
});

const page: Awaited<ReturnType<typeof blueCollarJobsSearch>> =
  await blueCollarJobsSearch(searchRequest);

console.log("Listings:", page.data?.output.jobs.length);
console.log("Estimate:", page.data?.output.estimatedJobCount);
console.log("Next page:", page.data?.output.nextPageToken);
console.log("Cost:", page.data?.chargeInfo);

Search inputs

At least one of companySlug, query, or location must be non-empty (400 if all are missing).

FieldWhat to send
companySlugFrom blueCollarResolveCompany. Company-only search lists that employer's board
queryTitle or keyword, e.g. forklift operator, CDL driver
locationUS city, state, or region, e.g. Philadelphia, PA, Texas
nextPageTokenOpaque token from the previous search response

You can combine them (company + keyword, keyword + city, all three).

Resolve company

Send companyName and/or domain (at least one). Response: slug, companyName, optional jobCount (approximate open listings).

A company that does not resolve returns HTTP 404 and still charges for the attempt (chargeInfo is on the 404 body). Transient 500s refund.

What a listing contains

Each jobs[] item: id, title, companyName, location, url, optional description, optional estimatedPostedAt (ISO date), optional salary:

salary fieldMeaning
textAs shown on the listing ($18 - $22 an hour)
localParsed min/max in the listed currency, when parseable
usdUSD min/max when the listing is in USD
periodhourly | daily | monthly | yearly

Pagination

nextPageToken is supported on company-slug searches. Keyword/location searches return one deep page; passing a token without companySlug returns 400.

The token is opaque and must match the current search params. Paginate until nextPageToken is null. Later pages can return fewer jobs than earlier ones. Each page is a separate 2-credit call.

A token problem returns 400 with one of these messages, and the fix is always the same: start again from the first page with the same parameters.

MessageCause
"nextPageToken does not match the provided search parameters."You changed a filter between pages
"Invalid nextPageToken format." or "Invalid nextPageToken. It may have expired or been corrupted."The token was altered, truncated, or is too old
"nextPageToken is only supported for companySlug searches. Keyword and location searches return a single deep result set."You passed a token on a keyword or location search

Using it effectively

  • Resolve well-known employers (Amazon, Walmart, Caterpillar) before a company-board walk so companySlug is one we can match.
  • Keep location to US strings the job boards understand. Non-US locations are not supported.
  • Treat estimatedJobCount as a hint, not a billable count API.
  • Honor HTTP 429. 503 means try again shortly.
  • chargeInfo is authoritative.

Use cases

  • Staffing / light industrial: warehouse and machine-operator volume in a metro.
  • Field sales into plants: who is hiring maintenance or CDL roles at a named manufacturer.
  • Local GTM: service businesses hiring in a state, then Kitchen Sink

Credits

OperationDefault credits
blueCollarJobsSearch2 per search call (including empty pages)
blueCollarResolveCompany2 per resolve attempt (including 404)

See Billing & credits. Credit amounts are defaults — custom pricing is available for bulk use cases.

Related: Job search · SDKs · MCP

On this page