n8n integration
Verify contractor licenses in any n8n workflow
Drop a licensing check into onboarding, lead routing, or compliance flows. One HTTP Request node returns license status, trade, and expiration from state boards across 28 states. You only pay for the items we match.
License verification for any workflow
Onboarding a subcontractor, routing an inbound lead, or running a compliance gate? Add one node and you know whether the contractor is licensed and active before the workflow continues.
The HTTP Request node calls our verify endpoint per item and hands back the license status, number, trade, expiration, and any contact on file. Branch on match_confidence to auto-approve, flag for review, or reject.
1. Get an API key
Emailed in under a minute. The same key works on the REST API and the MCP server. No card, no call.
2. Add an HTTP Request node
Point an HTTP Requestnode at the verify endpoint, and map each item’s fields into the body with expressions.
Method & URL
POST https://contractorroster.com/api/v1/verify
Headers
X-API-Key: cr_live_YOUR_KEY Content-Type: application/json
Body (JSON, with expressions)
{
"name": "{{ $json.company_name }}",
"state": "{{ $json.state }}",
"city": "{{ $json.city }}"
}Pass name for a fuzzy match, or license_no for an exact one. The response comes back as parsed JSON you can reference downstream.
Two settings to get right
- Turn Send Body on and set Body Content Type to
JSON. - Store the key as a Header Auth credential (name
X-API-Key) so it is reused and never sits in plain text.
3. What comes back
Each call returns the matched license plus a confidence score. Use the fields you need from the response: record.license_no, record.status, match_confidence, and the rest.
{
"matched": true,
"match_confidence": 1,
"match_method": "exact",
"record": {
"license_no": "1000002",
"business_name": "RANDALL MARK DOCKERY",
"status": "CLEAR",
"trade": "C57",
"issue_date": "2015-01-10",
"expiration_date": "2027-01-31",
"city": "LODI",
"zip": "95242",
"phone": "(925) 383-0487",
"email": null,
"website": null
}
}No confident match returns { "matched": false } with any near candidates, and never charges you. Gate your flow on match_confidence to set your own bar.
Coverage & pricing
10¢ per match, from a prepaid balance. A miss costs nothing, so you only pay for hits. Top up from $50 via Stripe.
Coverage spans 28 stateswith 17 trades, sourced directly from each state’s licensing board. A contractor in a state we don’t cover yet returns matched: false. New states are added regularly.
Prefer to pull whole lists instead of verifying one at a time? The same key works on the MCP server and the HTTP API.