A JSON kind maps to a component per template: split is CodeSplit on a product, UseCaseSplit on a use case, HubSplit on a hub.
The production components, fed with the site’s own data
29 sections in six groups. Each one is the real component, rendered full width with the JSON of a real page, so what you see here is what ships. The card above each specimen says which file renders it, which JSON kind produces it, which templates call it and what it requires.
A missing asset or href switches a component to a degraded variant without an error. The contract lists what each one requires.
Every section carries its .container and its padding-top. Nothing here is wrapped, so the geometry is the one of the live page.
A rail, a matrix or a split follows a grid. Two consecutive grids read as one long grid.
Heroes: one per template, never two on a page
Four heroes, one H1 each. The framed hero carries a MotionScene in its proof frame; the centered heroes carry copy and two CTAs.
ProductHero
components/product/ProductHero.astroThe centered product hero: tag, H1 with an accent segment, subtitle, two buttons. No KPI band below it since the September build (the stats field of the JSON is dormant).
Notputting a proof frame in it. A product opens on its logos band, the proof comes with the first section.
Any market, mapped
Explore companies with custom targeting
Search companies by industry, size, location, keywords, revenue, web traffic, SIC/NAICS codes, and signals to build smarter account lists.
JSON · content/products/company-search.json › hero
{
"tag": "Any market, mapped",
"h1": "Explore companies with **custom targeting**",
"subtitle": "Search companies by industry, size, location, keywords, revenue, web traffic, SIC/NAICS codes, and signals to build smarter account lists.",
"primaryCta": {
"label": "Get 1,000 credits free",
"href": "https://app.blitz-api.ai"
},
"secondaryCta": {
"label": "API Docs",
"href": "https://docs.blitz-api.ai/api-reference/company-search/company-search"
}
}UseCaseHero
components/usecase/UseCaseHero.astroThe framed hero (top border, hero, bottom border) with the MotionScene of the slug in its proof frame. Framed pages are the playbook pages.
Notrendering it without a scene: the media zone stays empty and the hero becomes a centered text block.
Build your TAM with B2B data
Create target account lists using company filters, job signals, enrichment, and decision-maker discovery from one API infrastructure.
BUILD TAMJSON · content/use-cases/build-tam.json › hero (+ specs/use-cases/build-tam.json)
{
"tag": "By use case",
"h1": "Build your TAM with **B2B data**",
"subtitle": "Create target account lists using company filters, job signals, enrichment, and decision-maker discovery from one API infrastructure.",
"primaryCta": {
"label": "Start building",
"href": "https://app.blitz-api.ai"
},
"secondaryCta": {
"label": "Contact us",
"href": "/contact"
}
}PersonaHero
components/persona/PersonaHero.astroThe persona hero: « B2B data APIs for » on one line, the persona in accent on the next.
B2B data APIs for
GTM Engineers
Use BlitzAPI to create search, enrichment, validation, and signal workflows directly inside your GTM stack.
JSON · content/teams/gtm-engineers.json › hero
{
"tag": "Built for GTM Engineers",
"h1": "B2B data APIs for GTM Engineers",
"subtitle": "Use BlitzAPI to create search, enrichment, validation, and signal workflows directly inside your GTM stack.",
"primaryCta": {
"label": "Get 1,000 credits free",
"href": "https://app.blitz-api.ai"
},
"secondaryCta": {
"label": "Contact us",
"href": "/contact"
}
}PageHero
components/sections/PageHero.astroThe standard hero of internal pages when there is no product, playbook or persona to frame.
Notthe left variant with a bare .container: it carries the section envelope geometry (--container-inner + --pad-inner-s), otherwise its text sits on the left rail.
Unlimited data.
50 requests per second.
Top quality data at scale: verified before it reaches you, ten times our standard rate, one API key. The only choice left is the data you include.
Astro · pricing.astro
<PageHero tag={COPY.hero.tag} h1={COPY.hero.h1} subtitle={COPY.hero.subtitle} align="center" compact />The bands that pace the page
Trust, logos, the hatched divider, the offer, the signed conversion band. They are shared by every directory and never redrawn locally.
TrustedBand (product)
components/product/TrustedBand.astroThe « Trusted by the best GTM teams » band right under a product hero. 130px, uniform on the 15 products.
Trusted by the best GTM teams













Astro
<TrustedBand /> {/* components/product/TrustedBand.astro */}TrustedBand (use case)
components/usecase/TrustedBand.astroThe same trust signal for the framed pages: a centered hook instead of the bordered cell.
Trusted by the best GTM teams













Astro
<TrustedBand /> {/* components/usecase/TrustedBand.astro */}LogoBand
components/sections/LogoBand.astroThe client marquee alone, for pages whose hero already carries its own proof.













Astro
<LogoBand />SectionDivider
components/sections/SectionDivider.astroThe hatched band that separates the opening from the body, and the body from the closing. 92 → 60 → 50 → 44px across the breakpoints.
Notcompensating the next section by adjacency (:global(.A + .B)): those rules were dead in the cascade on 15 pages.
Astro
<SectionDivider />OfferBand
components/sections/OfferBand.astroThe lifetime offer: the strip states the deadline before a decision, the band on the home states 5 → 50 requests per second with its CTA.
Notwriting a figure in the component or the JSON. The offer changes in one file.
Astro
<OfferBand variant="strip" href="/pricing" /> {/* directory pages, before the CTA */}
<OfferBand variant="band" /> {/* home */}SignatureBand
components/sections/SignatureBand.astroThe signed conversion band before the FAQ: one brand signature per family, a line, the button to the API docs.
TS · config/signature-bands.ts › FAMILY_BANDS.search
{
"signature": "cascade",
"eyebrow": "SEARCH & DISCOVERY",
"text": "Every search endpoint shares the same filters, the same pagination, and the same response shape."
}
<SignatureBand {...FAMILY_BANDS[data.family]} href={data.docsUrl} />Text on the rail, proof on the side
A split develops one argument. The column scale descends (title 28, intro 18, bullets 16), the CTA sits on a rule, and the proof frame carries one asset.
FeatureLead
components/product/FeatureLead.astrokind: features (first section)The editorial opening of a page that has no split: a lead column and a numbered list of capabilities with their asset. A page never opens on a grid.
Nota features section later in the page: from position 2 on, features render as GrayCards.
A record built like an API response, not a scrape
A profile URL is the smallest honest input in B2B data: no name collisions, no domain guessing, exactly one person.
Typed fields, not text blobs
Experience comes back as experiences[], one object per position with start and end dates, a job_is_current flag, the job description and the work location. Education, skills and certifications are arrays you can map straight into a schema. Nothing left to parse.
Current by design
The record reflects where the person works now. Job changes are detected, and stale records are removed from live circulation, so yesterday's title does not ship as today's answer.
Keys that survive your joins
The record carries the person's canonical LinkedIn URL, and every position carries the employer's LinkedIn URL, LinkedIn ID and domain: stable handles for resolving the same person and the same company across a CRM, a warehouse and a vendor export, however differently each of them spells the name.
An output that chains
This is the profile-first counterpart to the reverse lookups: use it when you already hold a LinkedIn URL and want the whole career, not a single contact point. Pass the same URL to Email Enrichment or Phone Enrichment when you also need a way to reach the person.
JSON · content/products/profile-enrichment.json › sections[0] (features)
{
"kind": "features",
"title": "A record built like an API response, not a scrape",
"subtitle": "A profile URL is the smallest honest input in B2B data: no name collisions, no domain guessing, exactly one person.",
"items": [
{
"title": "Typed fields, not text blobs",
"text": "Experience comes back as experiences[], one object per position with start and end dates, a job_is_current flag, the job description and the work location. Education, skills and certifications are arrays you can map straight into a schema. Nothing left to parse.",
"asset": "json-object"
},
{
"title": "Current by design",
"text": "The record reflects where the person works now. Job changes are detected, and stale records are removed from live circulation, so yesterday's title does not ship as today's answer.",
"asset": "person-record"
},
{
"title": "Keys that survive your joins",
"text": "The record carries the person's canonical LinkedIn URL, and every position carries the employer's LinkedIn URL, LinkedIn ID and domain: stable handles for resolving the same person and the same company across a CRM, a warehouse and a vendor export, however differently each of them spells the name.",
"asset": "resolver"
},
{
"title": "An output that chains",
"text": "This is the profile-first counterpart to the reverse lookups: use it when you already hold a LinkedIn URL and want the whole career, not a single contact point. Pass the same URL to Email Enrichment or Phone Enrichment when you also need a way to reach the person.",
"asset": "enrichment-chain"
}
]
}CodeSplit
components/product/CodeSplit.astrokind: splitThe product overview: eyebrow, accented title, vertical-bar bullets, the API Docs button, and the dark panel that receives the asset.
Notchanging the 72px before the button or the 556×448 panel: the hubs share these values, changing them misaligns the site.
Search
Explore any market with custom targeting
Search companies by firmographics, location, keywords, traffic, revenue, ad activity, and signals to build smarter account lists from one request.
Search companies by industry, size, location, and keywords
Build TAMs and ABM lists from custom targeting
JSON · content/products/company-search.json › sections[0] (split)
{
"kind": "split",
"title": "Explore any market with custom targeting",
"subtitle": "Search companies by firmographics, location, keywords, traffic, revenue, ad activity, and signals to build smarter account lists from one request.",
"asset": "search-query",
"items": [
{
"text": "Search companies by industry, size, location, and keywords"
},
{
"text": "Build TAMs and ABM lists from custom targeting"
}
]
}ProductTabs
components/product/ProductTabs.astrokind: showcaseSeveral capabilities of one API, one at a time, without replacing the explanation with a big product capture.
From company search to market intelligence
Define markets
Build precise company universes. Start with any market and narrow it using company size, industry, location, keywords, revenue, web traffic, ad spend, SIC codes, or NAICS codes.
Detect signals
Find companies showing movement. Use company data and market signals to identify accounts that are growing, investing, hiring, advertising, or moving into a new phase.
Build lists
Turn targeting into account lists. Create clean company datasets for outbound, ABM, territory planning, CRM enrichment, or market mapping without starting from static databases.
JSON · content/products/company-search.json › sections[1] (showcase)
{
"kind": "showcase",
"title": "From company search to **market intelligence**",
"items": [
{
"title": "Define markets",
"text": "Build precise company universes. Start with any market and narrow it using company size, industry, location, keywords, revenue, web traffic, ad spend, SIC codes, or NAICS codes.",
"asset": "filter-set"
},
{
"title": "Detect signals",
"text": "Find companies showing movement. Use company data and market signals to identify accounts that are growing, investing, hiring, advertising, or moving into a new phase.",
"asset": "signal"
},
{
"title": "Build lists",
"text": "Turn targeting into account lists. Create clean company datasets for outbound, ABM, territory planning, CRM enrichment, or market mapping without starting from static databases.",
"asset": "dataset",
"assetValue": "65M+",
"assetLabel": "COMPANIES"
}
]
}UseCaseSplit
components/usecase/UseCaseSplit.astrokind: splitThree variants derived from the content, never chosen by a prop: bullets, conversion band, showcase. The second split of a use case is the conversion band.
Nota second split without an href item: it silently falls back to « points » and the page shows two rows of the same shape.
Create target account lists from better data
Build a TAM that your sales and growth teams can actually use: filtered, enriched, prioritized, and ready for CRM or outbound workflows.
Build a TAM your team can actually use
A static company list is not enough. BlitzAPI helps you create a target account market using company data, hiring signals, enrichment, and decision-maker discovery, so your team can focus on the accounts most likely to matter.
JSON · content/use-cases/build-tam.json › sections[0] and sections[3] (split)
{
"kind": "split",
"title": "Create target account lists **from better data**",
"subtitle": "Build a TAM that your sales and growth teams can actually use: filtered, enriched, prioritized, and ready for CRM or outbound workflows.",
"asset": "filter-set",
"items": [
{
"text": "Identify companies that match your ICP."
},
{
"text": "Add job and growth signals to your TAM."
},
{
"text": "Prioritize accounts before outreach."
}
]
}
{
"kind": "split",
"title": "Build a TAM your team can actually use",
"subtitle": "A static company list is not enough. BlitzAPI helps you create a target account market using company data, hiring signals, enrichment, and decision-maker discovery, so your team can focus on the accounts most likely to matter.",
"asset": "gtm-loop",
"items": [
{
"title": "Start building your TAM",
"href": "https://app.blitz-api.ai"
}
]
}HubSplit
components/hub/HubSplit.astrokind: splitThe editorial split of the two hubs, extracted from CodeSplit: same geometry, a proof frame with a head and a foot line.
AI-native tooling
Docs your AI tools can read
Every page of docs.blitz-api.ai is available as Markdown and indexed for the MCP server. Whether you write the code or your agent does, it works from the same source of truth: real endpoints, current parameter schemas, accurate response shapes.
MCP server URL
Plug https://docs.blitz-api.ai/mcp into Claude, Cursor, or any MCP-compatible tool.
Fewer hallucinations
Your assistant reads the actual API reference instead of guessing endpoints and parameter names.
JSON · data/pages/developers.json › split
{
"kind": "split",
"eyebrow": "AI-native tooling",
"title": "Docs your **AI tools** can read",
"subtitle": "Every page of docs.blitz-api.ai is available as Markdown and indexed for the MCP server. Whether you write the code or your agent does, it works from the same source of truth: real endpoints, current parameter schemas, accurate response shapes.",
"items": [
{
"text": "Plug https://docs.blitz-api.ai/mcp into Claude, Cursor, or any MCP-compatible tool."
},
{
"text": "Your assistant reads the actual API reference instead of guessing endpoints and parameter names."
},
{
"title": "MCP setup guide",
"href": "https://docs.blitz-api.ai/guide/integrations/MCP"
}
],
"asset": "terminal-command",
"proof": {
"head": "DOCS → YOUR AI TOOLS",
"status": "LIVE",
"label": "docs.blitz-api.ai/mcp",
"alt": "Terminal command pointing an AI tool at the live BlitzAPI documentation MCP server",
"foot": "REAL ENDPOINTS · CURRENT SCHEMAS"
}
}One grammar of destination cells
Equal cells, 1px rules drawn by the gap, the destination type in mono deduced from the href, arrow visible at rest, whole cell clickable. No text block is vertically centered.
GrayCards
components/product/GrayCards.astrokind: features · usecases · apis · stepsThe gray cards (surface-alt, radius 4px) shared by three roles: capabilities, destinations with a rolling « Learn more », numbered steps.
Nottwo card bands in a row. A rail or a matrix replaces the second one.
Built for smarter account discovery
Explore markets, identify high-fit accounts, and use signals to prioritize where your team should focus first.
Explore markets
Search any segment by combining firmographic, geographic, keyword, traffic, revenue, and classification filters.
Prioritize accounts
Use signals like growth, hiring, traffic, ad activity, and ICP fit to focus on companies with stronger potential.
Build workflows
Turn company results into people search, enrichment, validation, CRM sync, ABM, or outbound workflows.
Related APIs
Company Search API
Search and discover companies by industry, size, location, keywords, and signals. Build markets, identify accounts, and create better prospecting workflows.
Profile Enrichment API
Turn one LinkedIn profile URL into the complete person record: typed JSON with headline, location, each role and its employer identifiers, education and skills.
From URL to typed record
One endpoint, POST /v2/enrichment/person (Person Enrichment in the API reference), turns a profile link into structured JSON.
Send the URL
POST the person's LinkedIn URL as person_linkedin_url. That is the whole request body; no name, no company, no guessing on your side.
We resolve the person
The URL is matched against 550M+ profiles. Every response carries found: on true, person holds the full profile; on false, person is null and nothing is counted.
Read the record
The full record lands in typed fields: identity, headline, about, location and connections count, then experiences[], education[], skills[] and certifications[], each one ready to map into a schema.
Write it back, or chain it
Pass the LinkedIn URL straight into email or phone enrichment, or write the record back to your CRM and join on the employer identifiers carried by each position.
JSON · content/products/company-search.json › features (plain) · relatedProducts (links) · steps (numbered)
{
"kind": "features",
"title": "Built for smarter account **discovery**",
"subtitle": "Explore markets, identify high-fit accounts, and use signals to prioritize where your team should focus first.",
"items": [
{
"title": "Explore markets",
"text": "Search any segment by combining firmographic, geographic, keyword, traffic, revenue, and classification filters.",
"icon": "/icons/Work-Flow.svg",
"asset": "filter-set"
},
{
"title": "Prioritize accounts",
"text": "Use signals like growth, hiring, traffic, ad activity, and ICP fit to focus on companies with stronger potential.",
"icon": "/icons/Data.svg",
"asset": "icp-score"
},
{
"title": "Build workflows",
"text": "Turn company results into people search, enrichment, validation, CRM sync, ABM, or outbound workflows.",
"icon": "/icons/Design.svg",
"asset": "router"
}
]
}
// links: Related APIs, derived from relatedProducts[]
[
{
"title": "Company Search API",
"text": "Search and discover companies by industry, size, location, keywords, and signals. Build markets, identify accounts, and create better prospecting workflows.",
"href": "/products/company-search"
},
{
"title": "Profile Enrichment API",
"text": "Turn one LinkedIn profile URL into the complete person record: typed JSON with headline, location, each role and its employer identifiers, education and skills.",
"href": "/products/profile-enrichment"
}
]PlaybookGrid
components/usecase/PlaybookGrid.astrokind: featuresThe capability map: a closed matrix where every cell is a destination, its type in mono deduced from the href.
Built for every data workflow
Everything required to discover companies, identify buyers, enrich records, detect signals, and activate data from a single infrastructure layer.
JSON · content/use-cases/build-tam.json › sections[2] (features)
{
"kind": "features",
"title": "Built for every **data workflow**",
"subtitle": "Everything required to discover companies, identify buyers, enrich records, detect signals, and activate data from a single infrastructure layer.",
"items": [
{
"title": "Build TAM",
"text": "Create dynamic markets using companies, people, jobs and signals.",
"href": "/use-cases/build-tam"
},
{
"title": "Find Decision Makers",
"text": "Identify decision makers and key stakeholders across every account.",
"href": "/use-cases/find-decision-makers"
},
{
"title": "Jobs Intelligence",
"text": "Turn millions of job postings into signals and market intelligence.",
"href": "/products/jobs-search"
},
{
"title": "Enrich Records",
"text": "Transform incomplete records into complete, actionable profiles.",
"href": "/use-cases/profile-enrichment"
},
{
"title": "Identity Resolution",
"text": "Resolve domains, emails, LinkedIn URLs, and matching keys across fragmented datasets.",
"href": "/use-cases/data-resolution"
},
{
"title": "AI-Native Infrastructure",
"text": "Plug agents and AI workflows into the data layer through MCP, Skills, and typed SDKs.",
"href": "/developers"
}
]
}ConnectorMatrix
components/hub/ConnectorMatrix.astrokind: showcaseThe orchestration tools that call BlitzAPI. GUIDE cells link, HTTP MODULE cells say the truth.
Works with your stack
The tools your team already uses, one data engine behind them.
JSON · data/pages/integrations.json › showcase
{
"kind": "showcase",
"title": "Works with **your stack**",
"subtitle": "The tools your team already uses, one data engine behind them.",
"linkLabel": "Guide",
"items": [
{
"title": "Clay",
"text": "Paste a cURL command into Clay's HTTP API and build high-volume enrichment waterfalls without writing code.",
"href": "https://docs.blitz-api.ai/guide/integrations/clay",
"logo": "clay"
},
{
"title": "n8n",
"text": "Chain waterfall search, enrichment, and CRM sync into autonomous workflows with the HTTP Request node.",
"href": "https://docs.blitz-api.ai/guide/integrations/n8n",
"logo": "n8n"
},
{
"title": "Make",
"text": "Add BlitzAPI to thousands of app scenarios with the HTTP module: Airtable, HubSpot, Google Sheets, and more.",
"href": "https://docs.blitz-api.ai/guide/integrations/make",
"logo": "make"
},
{
"title": "Zapier",
"text": "Trigger enrichment from any Zap with a webhook step and write results back to your connected apps.",
"logo": "zapier"
},
{
"title": "Airtable",
"text": "Enrich bases with company, contact, and email data through automations or your orchestration tool of choice.",
"logo": "airtable"
},
{
"title": "Google Sheets",
"text": "Turn spreadsheets into enrichment pipelines via Make, n8n, or a simple script.",
"logo": "google-sheets"
},
{
"title": "HubSpot",
"text": "Refresh company records, add decision makers, and re-verify emails on workflow triggers.",
"logo": "hubspot"
},
{
"title": "Salesforce",
"text": "Power flows and buttons with live enrichment: resolve, refresh, and complete records on demand.",
"logo": "salesforce"
},
{
"title": "Pipedrive",
"text": "Keep deals moving with enriched organizations and verified contact data.",
"logo": "pipedrive"
},
{
"title": "Smartlead",
"text": "Feed campaigns with validated emails and enriched personalization fields.",
"logo": "smartlead"
},
{
"title": "Instantly",
"text": "Load clean, verified prospect lists straight into your sending infrastructure.",
"logo": "instantly"
},
{
"title": "Lemlist",
"text": "Launch campaigns on enriched contacts with emails checked before the first send.",
"logo": "lemlist"
}
]
}UseCaseRail
components/sections/UseCaseRail.astrokind: usecases · showcaseThe editorial rail: one full row per destination instead of a second grid of cards.
What teams build with Company Search
JSON · content/products/company-search.json › usecases
{
"kind": "usecases",
"title": "What teams build with Company Search",
"items": [
{
"title": "Decision Makers Identification",
"text": "Find the right people inside target accounts and map the stakeholders who matter most.",
"href": "/use-cases/find-decision-makers"
},
{
"title": "Build TAM",
"text": "Create dynamic target markets by combining company data, people data, jobs, and signals.",
"href": "/use-cases/build-tam"
},
{
"title": "Data Resolution & Matching",
"text": "Connect company names, domains, LinkedIn URLs, websites, and identifiers into cleaner datasets.",
"href": "/use-cases/data-resolution"
},
{
"title": "For Revenue Teams",
"text": "Give revenue teams one data layer to find, enrich, and activate their next best accounts.",
"href": "/teams/revops"
}
]
}WorkflowSteps
components/sections/WorkflowSteps.astrokind: stepsA sequence on a rail, numbered. The one component every template shares for « how it works ».
From URL to typed record
One endpoint, POST /v2/enrichment/person (Person Enrichment in the API reference), turns a profile link into structured JSON.
Send the URL
POST the person's LinkedIn URL as person_linkedin_url. That is the whole request body; no name, no company, no guessing on your side.
We resolve the person
The URL is matched against 550M+ profiles. Every response carries found: on true, person holds the full profile; on false, person is null and nothing is counted.
Read the record
The full record lands in typed fields: identity, headline, about, location and connections count, then experiences[], education[], skills[] and certifications[], each one ready to map into a schema.
Write it back, or chain it
Pass the LinkedIn URL straight into email or phone enrichment, or write the record back to your CRM and join on the employer identifiers carried by each position.
JSON · content/products/profile-enrichment.json › steps
{
"kind": "steps",
"title": "From URL to typed record",
"subtitle": "One endpoint, POST /v2/enrichment/person (Person Enrichment in the API reference), turns a profile link into structured JSON.",
"items": [
{
"title": "Send the URL",
"text": "POST the person's LinkedIn URL as person_linkedin_url. That is the whole request body; no name, no company, no guessing on your side."
},
{
"title": "We resolve the person",
"text": "The URL is matched against 550M+ profiles. Every response carries found: on true, person holds the full profile; on false, person is null and nothing is counted."
},
{
"title": "Read the record",
"text": "The full record lands in typed fields: identity, headline, about, location and connections count, then experiences[], education[], skills[] and certifications[], each one ready to map into a schema."
},
{
"title": "Write it back, or chain it",
"text": "Pass the LinkedIn URL straight into email or phone enrichment, or write the record back to your CRM and join on the employer identifiers carried by each position."
}
]
}RelatedApis
components/usecase/RelatedApis.astrokind: apis · usecasesThe endpoints that execute the playbook: title and proof on the left, every endpoint unfolded on the right.
Notan accordion. Below six entries everything is unfolded, and the destination link exists at rest.
JSON · content/use-cases/build-tam.json › apis (+ UC_META endpoint)
{
"kind": "apis",
"title": "APIs that power this playbook",
"asset": "dataset",
"items": [
{
"title": "Company Search",
"text": "Search by industry, size, country, keywords, and market filters.\nCreate clean company lists from your ICP criteria.\nUse results as the foundation for enrichment and scoring.",
"href": "/products/company-search"
},
{
"title": "Jobs Signal",
"text": "Track jobs by company and month.\nFilter by job title, description, location, and date posted.\nSpot growth, expansion, and team-building signals.",
"href": "/products/jobs-signal"
},
{
"title": "Waterfall ICP",
"text": "Search each account with your ICP hierarchy.\nReturn the best available decision maker first.\nSend matched contacts to enrichment or outbound.",
"href": "/products/waterfall-icp"
}
]
}CodeTabs
components/hub/CodeTabs.astrokind: codeThe same call in cURL, Python and TypeScript. A developers page shows code.
Nota snippet without a source URL: the surface of an SDK is not deduced by analogy.
First call
The same call, three ways
A LinkedIn profile URL in, a verified work email out. Same endpoint, same parameters, same response. You pick the interface, not the API.
curl -X POST https://api.blitz-api.ai/v2/enrichment/email \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"person_linkedin_url":"https://www.linkedin.com/in/example-person"}'from blitz_api import BlitzAPI
client = BlitzAPI() # reads BLITZ_API_KEY
email = client.enrichment.email(
person_linkedin_url="https://www.linkedin.com/in/example-person"
)
if email.found:
print(email.email)import { BlitzAPI } from "blitz-api-js";
const client = new BlitzAPI(); // reads BLITZ_API_KEY
const email = await client.enrichment.email({
person_linkedin_url: "https://www.linkedin.com/in/example-person",
});
if (email.found) console.log(email.email);foundemailall_emails[]JSON · data/pages/developers.json › code
{
"kind": "code",
"eyebrow": "First call",
"title": "The same call, **three ways**",
"subtitle": "A LinkedIn profile URL in, a verified work email out. Same endpoint, same parameters, same response. You pick the interface, not the API.",
"method": "POST",
"endpoint": "/v2/enrichment/email",
"responseFields": [
"found",
"email",
"all_emails[]"
],
"items": [
{
"title": "cURL",
"source": "https://docs.blitz-api.ai/api-reference/people-enrichment/find-work-email",
"code": "curl -X POST https://api.blitz-api.ai/v2/enrichment/email \\\n -H \"x-api-key: YOUR_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"person_linkedin_url\":\"https://www.linkedin.com/in/example-person\"}'"
},
{
"title": "Python",
"source": "https://docs.blitz-api.ai/sdks/python",
"code": "from blitz_api import BlitzAPI\n\nclient = BlitzAPI() # reads BLITZ_API_KEY\n\nemail = client.enrichment.email(\n person_linkedin_url=\"https://www.linkedin.com/in/example-person\"\n)\nif email.found:\n print(email.email)"
},
{
"title": "TypeScript",
"source": "https://docs.blitz-api.ai/sdks/typescript",
"code": "import { BlitzAPI } from \"blitz-api-js\";\n\nconst client = new BlitzAPI(); // reads BLITZ_API_KEY\n\nconst email = await client.enrichment.email({\n person_linkedin_url: \"https://www.linkedin.com/in/example-person\",\n});\nif (email.found) console.log(email.email);"
}
]
}DarkWorkflowGrid
components/sections/DarkWorkflowGrid.astrokind: featuresThe dark matrix « Built for every data workflow »: six workflows, one acquisition CTA, on ink.
Built for every data workflow
Everything required to discover companies, identify buyers, enrich records, detect signals, and activate data from a single infrastructure layer.
JSON · data/pages/about.json › features[1]
{
"kind": "features",
"title": "Built for every **data workflow**",
"subtitle": "Everything required to discover companies, identify buyers, enrich records, detect signals, and activate data from a single infrastructure layer.",
"items": [
{
"title": "Build TAM",
"text": "Create dynamic markets using companies, people, jobs and signals"
},
{
"title": "Find Decision Makers",
"text": "Identify decision makers and key stakeholders across every account."
},
{
"title": "Jobs Intelligence",
"text": "Turn millions of job postings into signals and market intelligence."
},
{
"title": "Enrich Records",
"text": "Transform incomplete records into complete, actionable profiles."
},
{
"title": "Identity Resolution",
"text": "Resolve domains, emails, LinkedIn URLs, and matching keys across fragmented datasets."
},
{
"title": "AI-Native Infrastructure",
"text": "Plug agents and AI workflows into the data layer through MCP, Skills, and typed SDKs."
}
]
}The blocks that carry a voice
Pains, the founder quote, the stack quote, the counters. They read a persona JSON or about.json, and the template derives their props structurally.
PainsSection
components/persona/PainsSection.astrokind: split + features (untitled)The pains row: an editorial column, the persona scene, three cells. The template derives everything from the first split and the untitled features.
Replace manual
GTM research
JSON · content/teams/gtm-engineers.json › pains split + untitled features
{
"kind": "split",
"title": "Replace manual **GTM research**",
"subtitle": "Search, enrich, validate, and route B2B data at scale",
"items": [
{
"text": "BlitzAPI gives you clean endpoints to build the workflow once, run it at scale, and push structured outputs into the tools your team already uses."
},
{
"text": "Create repeatable workflows for outbound, CRM enrichment, and routing."
},
{
"text": "Send clean company, contact, email, and signal data into your stack."
},
{
"title": "Talk to the team",
"href": "/contact"
}
]
}
{
"kind": "features",
"items": [
{
"title": "Less manual work",
"text": "Replace research, lookup, and enrichment tasks with API calls."
},
{
"title": "Cleaner GTM data",
"text": "Structured outputs, ready for your CRM, outbound tools, and workflows."
},
{
"title": "Ready to scale",
"text": "Run the same playbook across hundreds or thousands of accounts."
}
]
}WorkplaceSection
components/persona/WorkplaceSection.astrokind: split (founder) + split (Plug BlitzAPI)The human proof of a persona page: the founder quote, the two dataset volumes, and how a GTM uses it in their stack. A five-cell matrix with mono headers.
A data layer for GTM systems that need to move fast
Founder
“BlitzAPI helps GTM teams replace manual research with programmable data workflows. Search accounts, identify decision makers, enrich records, validate emails, and send clean data into your systems.”
Enrichment chainLive
Data layer · Continuous
Data volume · Aggregate
Plug BlitzAPI into your stack
“Use BlitzAPI as the API layer behind your Clay workflows, CRMs, internal tools, automations, and custom agents. High-volume playbooks, without per-record anxiety.”
JSON · content/teams/gtm-engineers.json › founder split + « Plug BlitzAPI » split
{
"kind": "split",
"title": "A data layer for GTM systems that need to **move fast**",
"items": [
{
"title": "Antoine Blitz, Founder at BlitzAPI",
"text": "BlitzAPI helps GTM teams replace manual research with programmable data workflows. Search accounts, identify decision makers, enrich records, validate emails, and send clean data into your systems."
}
]
}
{
"kind": "split",
"title": "Plug BlitzAPI into your stack",
"items": [
{
"text": "Use BlitzAPI as the API layer behind your Clay workflows, CRMs, internal tools, automations, and custom agents. High-volume playbooks, without per-record anxiety."
}
]
}CountersBand
components/persona/CountersBand.astroThe odometer counters. Only authorized KPIs, and a note that defines what a record is.
A record is any object the infrastructure operates on: companies, people, job postings and signals. One organisation can account for many.
JSON · data/pages/about.json › stats
[
{
"value": "1B+",
"label": "Records in our data infrastructure",
"note": "A record is any object the infrastructure operates on: companies, people, job postings and signals. One organisation can account for many."
}
]FAQ, proof, then the decision
Every directory page closes the same way: signed band, FAQ with structured data, the offer strip, the CTA. The order is part of the contract.
FaqSection
components/sections/FaqSection.astroThe FAQ as native <details>, zero JavaScript, with its structured data. The answers are indexed and read by agents (llms-full.txt).
Notrecommending a product by name in prose without checking it still exists: FAQ residues are invisible to the link checker.
Frequently asked questions
Which filters can I combine?
Industry, company size, location, keywords, revenue, web traffic, ad activity, SIC and NAICS codes, and market signals, all combinable in a single query.
How many companies can I search?
Queries run against a data layer of 65M+ companies, so you can map entire markets instead of sampling from static databases.
What do I do with the results?
Chain company results into People Search, enrichment, validation, or CRM sync to go from a defined market to activated accounts in one workflow.
How can I test it on my ICP?
Sign up on app.blitz-api.ai with 1,000 free credits and run your real targeting filters before you commit.
JSON · content/products/company-search.json › faq
[
{
"q": "Which filters can I combine?",
"a": "Industry, company size, location, keywords, revenue, web traffic, ad activity, SIC and NAICS codes, and market signals, all combinable in a single query."
},
{
"q": "How many companies can I search?",
"a": "Queries run against a data layer of 65M+ companies, so you can map entire markets instead of sampling from static databases."
},
{
"q": "What do I do with the results?",
"a": "Chain company results into People Search, enrichment, validation, or CRM sync to go from a defined market to activated accounts in one workflow."
},
{
"q": "How can I test it on my ICP?",
"a": "Sign up on app.blitz-api.ai with 1,000 free credits and run your real targeting filters before you commit."
}
]Testimonials
components/sections/Testimonials.astroThe testimonial carousel. Hidden in every production build while QUOTES_ARE_PLACEHOLDERS is true in config/testimonials.ts (the four quotes are placeholders until the real verbatims arrive); it renders on the dev server.
Not rendered in this build: QUOTES_ARE_PLACEHOLDERS is true in config/testimonials.ts. Flip it once the real verbatims are in, and the carousel appears here and on the home page.
Astro
<Testimonials /> {/* slides: config/testimonials.ts */}CtaSection
components/sections/CtaSection.astroThe pre-footer CTA. Same words everywhere, so the site ends every chapter on the same decision.
Astro
<CtaSection cta={ctaId('product', 'cta_section', 'primary')} />