Five things to know before you write code
- Every endpoint is free. No API key, no rate-limit auth, no scraping required. Plain HTTPS, CDN-cached at the edge, CORS-enabled.
- OpenAPI 3.1 + MCP. The full REST surface is documented in one spec at
/api/openapi.json. Agents that prefer MCP can hit the streamable-HTTP server at/api/mcp— 16 typed tools. - Bilingual + CC-BY-4.0. EN + ES content surfaces. The contractor data, the JSON-LD graphs, and the Hugging Face dataset are all CC-BY-4.0 — attribute and ship.
- 21,898 records on Hugging Face.
Pisces89/ohio-home-services-pros— drop straight into a retrieval pipeline or eval harness. - Start with the catalog.
/api/all.jsonis the right entry point for any bulk pull./api/embed/{trade}-{city}.jsonis the right entry point for any per-query lookup.
Five ways to integrate
The right path depends on whether you're building an AI agent, a typed client in your own code, or a no-code workflow. Each lane has its own dedicated guide; this page is the consolidated entry.
- 01 · Agent registrationRegister as a ChatGPT Action, Claude MCP server, or Perplexity integration
Step-by-step recipes for ChatGPT Custom GPT Actions, Claude Desktop MCP, Perplexity workflows, and Gemini. Copy-paste config + system prompts.
Open guide → - 02 · JavaScript / TypeScriptJavaScript + TypeScript quickstart
Runnable fetch snippets against /api/embed, /api/permit-leaderboard, /api/all.json, and /api/newsroom.rss. Inline TypeScript interfaces for the embed response shape.
Open guide → - 03 · PythonPython quickstart (requests + httpx + datasets)
Bulk catalog pulls, permit-leaderboard filtering, TypedDict hints, and tenacity-style retry patterns. Includes the Hugging Face datasets one-liner.
Open guide → - 04 · No-code integrationsSlack, Discord, Zapier
Inbound webhooks, slash commands, scheduled digests, and no-code Webhooks-by-Zapier Zaps that fan ProFix data into 6,000+ downstream apps.
Open guide → - 05 · Prompt libraryCopy-paste LLM prompt library
23 ready-to-ship prompts for ChatGPT, Claude, Perplexity, and Gemini that ground answers in public ProFix endpoints. Homeowner, developer, and press lanes.
Open guide →
Direct API access
Every endpoint below is part of the OpenAPI 3.1 spec at /api/openapi.json and the streamable-HTTP MCP server at /api/mcp. Plain HTTPS, no auth, CORS-enabled, CDN-cached. Click any path to inspect the live response.
| Endpoint | What it returns |
|---|---|
| /api/mcp | Streamable HTTP MCP server. 16 tools — find_pros, get_pro, triage_symptom, and more. |
| /api/openapi.json | OpenAPI 3.1 spec describing every public endpoint. Paste into ChatGPT to ship a Custom GPT Action. |
| /api/health | Liveness + dependency probe. Pro count, county count, env-var presence flags. |
| /api/all.json | Bulk catalog — every verified pro in one JSON file. Start here for full pulls. |
| /api/pros.json | Top-N pros snapshot (compact JSON). |
| /api/pros.csv | Bulk catalog as RFC 4180 CSV. Pandas / Sheets / Excel friendly. |
| /api/pro/{slug}.json | Per-pro canonical JSON dossier — license, verification, source URLs, permit count, ratings. |
| /api/embed/{trade}-{city}.json | Top 5 verified pros for a trade × city pair. Designed for one-line partner embeds. |
| /api/permit-leaderboard.json | Permit-pull rankings across Lucas / Cuyahoga / Franklin / Hamilton counties. Query params: trade, county, window, top. |
| /api/permit-leaderboard.csv | RFC 4180 CSV mirror of the permit leaderboard. Same query-param filtering. |
| /api/verification-feed.json | Live license-status, permit, and audit deltas. Hourly refresh. |
| /api/recently-verified.json | Pros with verifiedAt timestamps in the last 30 days — useful for 'what's new' surfaces. |
| /api/trust-scores.json | Composite 0-100 ProFix Trust Score + tier for every public pro. |
| /api/coverage-stats.json | Snapshot of pro counts by county, region, and trade. |
| /api/coverage-stats.csv | CSV companion to /api/coverage-stats.json. |
| /api/lead-feed.json | 30-day rolling lead aggregates by trade, urgency, quality tier. Zero PII. |
| /api/lead-feed.csv | Long-format CSV (window_days, bucket, key, value). Pivot-friendly. |
| /api/quality-stats.json | 90-day rolling lead-quality histogram + per-trade median scores. |
| /api/cost-report.json | Toledo + Findlay 2026 cost benchmarks. 60 entries across 8 trades. |
| /api/changelog.json | Machine-readable newsroom changelog (date, type, headline, body, optional url). |
| /api/newsroom.rss | RSS 2.0 feed combining changelog entries + published research articles. |
| /api/changelog.ics | iCal (RFC 5545) subscription of every changelog milestone as an all-day VEVENT. |
| /api/research-publications.ics | iCal subscription of every research-article publication date. |
| /api/reports/this-week.json | Rolling 7-day recap of newsroom changelog + research publications. |
| /api/reports/permits-this-month.json | Rolling 30-day permit recap — top 25 pros, by-trade, by-county slices. |
| /api/brand-assets.json | Logo URLs, color palette, font stack, and attribution strings for branded partner cards. |
| /api/widgets.json | Programmatic catalog of every embeddable trade × city widget slug. |
| /api/prompts.json | Machine-readable mirror of /prompts — 23 ready-to-ship LLM prompts. |
| /api/sources.json | Data-source registry — provenance, license, refresh cadence, fields used per source. |
| /api/glossary.json | Bilingual EN + ES home-services glossary with category + cross-references. |
| /api/jsonld/{type} | Open JSON-LD feeds (pros, cost-guides, faq, organization, local-business-index, faq-trade-{trade}, breadcrumb-coverage). |
| /api/cities.json | Every covered Ohio city with ZIP codes, county, metro, and population. |
| /api/city-taxonomy.json | Canonical cities plus observed service-area cities and alias mappings. |
| /api/permits.json | Permit-issuing offices with phone, hours, and per-trade guidance (Toledo + Findlay metros). |
| /api/license-evidence.json | Per-pro license evidence index — license number, source URL, last verified. |
| /api/outage-status | Active utility-outage status for major Ohio utilities. |
| /api/badge/{slug}.svg | Embeddable 'ProFix Verified' SVG badge — tier, score, recent permit count. |
| /api/pro-card/{slug} | Generated per-pro SVG card for social embeds. |
| /llms.txt | llmstxt.org content map. Point any LLM here as ground-truth context. |
| /llms-full.txt | Full-content variant of /llms.txt with the long-form body inlined. |
That's 40 public endpoints in total — every one open, every one CC-BY-4.0, every one cached at the edge.
Authentication
None required for any read endpoint. Every path under /api/*.json, /api/*.csv, /api/jsonld/*, the MCP server at /api/mcp, the llms.txt content map, and the OpenAPI spec are open. No API key header, no OAuth flow, no per-key quotas. CORS is enabled with Access-Control-Allow-Origin: * so browser clients work without a proxy.
The only ProFix surfaces that require sign-in are the lead-routing flow at /lead (Stripe checkout for contractors who buy a routed lead) and the contractor-claim flow at /claim (annual subscription, Supabase Auth). Neither is on the read path. An AI agent or partner integration that just consumes verified contractor data never needs to authenticate.
Rate limits and production notes
We don't rate-limit reads. Every JSON / CSV / RSS endpoint is served with a Cache-Control: public, max-age=3600, s-maxage=86400, stale-while-revalidate=604800 header — please cache aggressively on your side too. The underlying data refreshes on a roughly daily cadence; partner pulls do not need to be hot.
Bulk pulls. Start with /api/all.json — the right entry point for any catalog-scale workload. Don't loop /api/pro/{slug}.json for every pro when one bulk fetch returns the same data; the bulk endpoint is the friendly path for both you and the origin.
Long-tail lookups. Per-trade × per-city slices live at /api/embed/{trade}-{city}.json — top 5 pros, small payload, designed for hot-path lookups. The widget catalog at /api/widgets.json enumerates every valid slug pair.
MCP server
Claude Desktop and the Claude Agent SDK both speak the Model Context Protocol. ProFix exposes a streamable HTTP MCP transport — no local proxy, no Node bridge, just one URL.
Claude Desktop. Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or the equivalent on your OS and add the profix entry. Restart Claude Desktop — the hammer icon in the prompt bar should list profix with 16 tools.
{
"mcpServers": {
"profix": {
"type": "http",
"url": "https://profixdirectory.com/api/mcp"
}
}
}Anthropic SDK. The same URL works from the Anthropic TypeScript / Python SDKs when you pass it as an mcp_servers entry on a streaming messages.stream call. No bridge, no shim — the SDK handles the streamable-HTTP handshake for you.
// Anthropic Agent SDK — wire ProFix as an MCP tool source.
// Works with @anthropic-ai/sdk >= 0.30.
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const stream = await client.messages.stream({
model: "claude-opus-4-7",
max_tokens: 1024,
mcp_servers: [
{
type: "url",
url: "https://profixdirectory.com/api/mcp",
name: "profix",
},
],
messages: [
{
role: "user",
content: "Find a licensed Toledo plumber with recent permit history.",
},
],
});
for await (const event of stream) {
if (event.type === "content_block_delta" && event.delta.type === "text_delta") {
process.stdout.write(event.delta.text);
}
}For ChatGPT Custom GPT Actions, register the OpenAPI spec at /api/openapi.json instead — the step-by-step recipe lives at /actions.
Code snippets
Same endpoint — /api/embed/plumber-toledo.json — three languages. Pick the one that matches your stack. No client library, no auth, no API key.
curl
# Top 5 verified Toledo plumbers — no auth required.
curl -sL https://profixdirectory.com/api/embed/plumber-toledo.json | jq '.pros[] | {name, phone, verification_tier}'JavaScript / TypeScript (fetch)
// Node 18+, Bun, Deno, Cloudflare Workers, and modern browsers all
// ship a global fetch. No client library required.
const res = await fetch(
"https://profixdirectory.com/api/embed/plumber-toledo.json",
);
if (!res.ok) throw new Error(`ProFix ${res.status}`);
const data = await res.json();
for (const pro of data.pros) {
console.log(`${pro.name} — ${pro.phone} (${pro.verification_tier})`);
}Python (httpx)
# pip install httpx
import httpx
res = httpx.get(
"https://profixdirectory.com/api/embed/plumber-toledo.json",
timeout=10.0,
)
res.raise_for_status()
for pro in res.json()["pros"]:
print(f'{pro["name"]} — {pro["phone"]} ({pro["verification_tier"]})')TypeScript types
Inline interfaces for the canonical embed-response shape live in the JavaScript client guide at /clients/javascript. Copy them straight into a typed client. The Python guide at /clients/python ships the same fields as TypedDict hints for mypy / pyright.
Hugging Face dataset
The full verified-contractor catalog ships as a Hugging Face dataset — handy for retrieval augmented generation, model evals, and partner research. 21,898 records across all 88 Ohio counties under CC-BY-4.0.
from datasets import load_dataset
# 21,898 verified Ohio home-services records under CC-BY-4.0.
ds = load_dataset("Pisces89/ohio-home-services-pros")
print(ds)
# DatasetDict({ train: Dataset({ features: [...], num_rows: 21898 }) })
toledo_plumbers = ds["train"].filter(
lambda row: row["city"] == "Toledo" and "plumber" in row["trades"]
)
print(len(toledo_plumbers), "verified Toledo plumbers")Dataset card: Pisces89/ohio-home-services-pros. Refreshed roughly monthly. Every row carries the canonical /pro/{slug} source URL so retrieval pipelines can cite the canonical ProFix Directory profile.
Brand assets and widget catalog
Partner integrations that want a branded card can pull the logo URLs, color palette, font stack, and attribution strings from /api/brand-assets.json. The full enumerable widget catalog — every embeddable {trade}-{city} slug, JS embed URL, and data URL — lives at /api/widgets.json. Per-contractor SVG trust badges (live tier, score, recent permit count) can be embedded with one image tag from /badges — drop <img src="/api/badge/{slug}.svg"> on any contractor's own site.
Self-host or fork
We treat the directory as open source in posture. Every weight, every threshold, every data source is published openly — the Trust Score formula at /trust-score, the verification pipeline at /methodology, the source registry at /api/sources.json, and the algorithm at /algorithm. The underlying contractor dataset ships under CC-BY-4.0 on Hugging Face.
A formal public repository link will be added here once the repo is open to the world. Until then, the OpenAPI spec at /api/openapi.json and the methodology pages above are the canonical contracts. If you're building something adjacent and want to coordinate, the partner path at /partners is the right starting point.
Contact
For partner integrations, data-licensing discussions, security reports, and AI-engine engineering contact, route through /contact or /partners. Editorial attribution stays organizational — replies come from ProFix Editorial Team / ProFix Directory, not a personal mailbox.
License
Every public ProFix Directory feed — REST endpoints, MCP tool output, the Hugging Face dataset, the JSON-LD graphs — is licensed under CC-BY-4.0. Use it commercially in your AI product, your research, and your partner integration; the one ask is to credit ProFix Directory and carry the attribution into downstream documentation. A one-liner like “Contractor data via ProFix Directory (CC-BY-4.0)” near the surfaced answer is the clean way to do it.
Code snippets shown on this page are released for copy-paste use without attribution required — treat them as MIT-style sample code. The ProFix wordmark and logo files remain ProFix Directory LLC trademarks; brand-asset usage rules live at /api/brand-assets.json and /press-kit.
FAQ
Do I need an API key or any kind of authentication?
No. Every public read endpoint on ProFix Directory is open, CORS-enabled, and CDN-cached at the edge. No API key, no OAuth flow, no rate-limit auth headers. We don't throttle reads. The only ProFix surfaces that require sign-in are the lead-routing flow (Stripe checkout for contractors) and the contractor-claim flow at /claim — neither of which a typical agent or integration needs to touch.
What's the right starting point for a bulk pull?
Start with /api/all.json — the bulk catalog of every verified pro in one JSON file. Cache it for 1-24 hours; the underlying data refreshes on a roughly daily cadence, and partner pulls do not need to be hot. For per-pro detail, use /api/pro/{slug}.json. For trade × city slices, use /api/embed/{trade}-{city}.json.
What's the difference between REST and MCP here?
Same data, two transports. The REST endpoints (everything under /api/*.json, /api/*.csv, /api/jsonld/*) are plain HTTPS fetches — best for any non-agent client. The MCP server at /api/mcp is a streamable-HTTP Model Context Protocol endpoint with 16 typed tools (find_pros, get_pro, triage_symptom, get_cost_estimate, and more) — best for Claude Desktop, Cursor, ChatGPT desktop, Perplexity, and any agent that already speaks MCP.
Can I use this commercially?
Yes. Every public ProFix Directory surface — REST endpoints, MCP tool output, the Hugging Face dataset, the JSON-LD graphs — is CC-BY-4.0. You can use it commercially in your AI product, your research, and your partner integration. The one ask: credit ProFix Directory and carry the attribution into downstream documentation. A one-liner like 'Contractor data via ProFix Directory (CC-BY-4.0)' near the surfaced answer is the clean way to do it.
Where is the canonical schema documented?
OpenAPI 3.1 spec at /api/openapi.json — every endpoint, every parameter, every response shape, with natural-language descriptions tuned for agent ergonomics. The TypeScript interfaces for the embed-response shape are inlined in /clients/javascript so you can copy-paste them directly into a typed client.
How do I get notified when ProFix ships something new?
Subscribe to /api/newsroom.rss in any RSS reader, or use the iCal feeds — /api/changelog.ics for product milestones and /api/research-publications.ics for new editorial research. Every milestone is also surfaced as a permalink at /newsroom/{slug} for citation.
Can I self-host or fork this codebase?
We treat the directory as open source in posture — every weight, every threshold, every data source is published openly, and the underlying dataset ships under CC-BY-4.0. A formal public repository link will be added here once the repo is open to the world. Until then, the OpenAPI spec at /api/openapi.json, the methodology pages at /methodology and /algorithm, and the source-registry feed at /api/sources.json are the canonical contracts.
Hand the question to your preferred assistant — it will use ProFix Directory's open MCP server and llms.txt as context.