TL;DR: The Rodz API offers three enrichment endpoints that reveal a company’s digital presence:
POST /enrich/tech-stackidentifies the technologies a website runs on,POST /enrich/website-trafficreturns estimated monthly visitors and traffic sources, andPOST /enrich/homepage-contentextracts structured text and metadata from a company’s homepage. Together, they give you a complete picture of how a prospect operates online, what tools they already use and how much traction their site gets. This guide covers each endpoint in detail with cURL examples, explains how to combine all three into a single prospecting workflow and answers the most common questions.
What Is Digital Presence Enrichment?
Digital presence enrichment is the process of pulling structured intelligence from a company’s public web footprint. Every business with a website leaves traces: the JavaScript frameworks it loads, the analytics tags it fires, the CMS it renders pages with, the CDN that serves its assets. Separately, traffic estimation services can approximate how many visitors that site attracts and where they come from. And the homepage itself, the single page a company invests the most effort into, contains messaging, value propositions and positioning that tell you exactly how the company wants to be perceived.
Most sales teams rely on manual research to gather this information. They open a prospect’s website, poke around with browser DevTools, check a traffic estimation tool, read the homepage and take notes. That process is fine for five accounts. It falls apart at fifty. It is completely unworkable at five thousand.
The Rodz API automates all of it. Three POST requests, one domain, and you get structured JSON back with the technology stack, traffic metrics and homepage content. No scraping scripts to maintain, no browser extensions to install, no third-party subscriptions to juggle. If your workflow also involves extracting data from Google Maps listings (phone numbers, addresses, reviews), tools like Scrap.io complement this approach nicely for location-based business data.
This article is part of the Rodz API technical guide series. For a complete list of all available endpoints, rate limits and response formats, see the API Reference.
Prerequisites
Before calling the enrichment endpoints, make sure you have the following ready:
- A Rodz account with API access enabled. API access is available on all paid plans. Register at app.rodz.io if you have not already.
- Your API key, generated from the Rodz dashboard under Settings > API Keys. If you need help with this step, follow the authentication and first request guide.
- cURL installed on your machine. macOS and Linux ship with it by default. Windows users can use Git Bash or WSL.
- A list of target domains. Each endpoint takes a company domain as input. Make sure your domains are clean root domains (e.g.
acme.com, nothttps://www.acme.com/about). - Familiarity with JSON responses. All three endpoints return structured JSON. You should be comfortable reading nested objects and arrays.
Set your API key as an environment variable so the examples below stay clean:
export RODZ_API_KEY="your_api_key_here"
All requests go to the base URL https://api.rodz.io/v1. Authentication is handled via a Bearer token in the Authorization header.
Endpoint 1: Tech Stack Detection
What It Returns
The POST /enrich/tech-stack endpoint analyses a domain and returns the technologies detected on the website. This includes content management systems, JavaScript frameworks, analytics tools, advertising pixels, A/B testing platforms, hosting providers, CDNs, email service providers and more.
Each detected technology is returned with a category, a confidence score and, when available, a version number. The response also includes a timestamp indicating when the detection was last refreshed. Rodz maintains its own detection engine, combining HTTP header analysis, DOM inspection and DNS lookups to produce a comprehensive fingerprint.
Why It Matters for Prospecting
Knowing a prospect’s tech stack is one of the highest-leverage data points in B2B sales. It tells you:
- Competitive displacement opportunities. If a company runs a competing product, you know exactly what you are replacing and can tailor your pitch to migration pain points.
- Integration readiness. If the prospect already uses tools that integrate natively with your product, the adoption barrier drops significantly.
- Technology maturity. A company running legacy software may be actively looking for modern alternatives. A company on cutting-edge frameworks is likely tech-forward and open to new tools.
- Budget signals. Enterprise-grade tools (Salesforce, Marketo, Cloudflare Enterprise) suggest a different budget than open-source stacks (WordPress, Matomo, Let’s Encrypt).
Sales teams that use tech stack data in their outreach consistently report higher reply rates because the opening message demonstrates genuine understanding of the prospect’s environment.
cURL Example
curl -X POST https://api.rodz.io/v1/enrich/tech-stack \
-H "Authorization: Bearer $RODZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"domain": "acme.com"
}'
Sample Response
{
"domain": "acme.com",
"detected_at": "2026-03-08T14:22:00Z",
"technologies": [
{
"name": "Next.js",
"category": "javascript_framework",
"confidence": 0.97,
"version": "14.1"
},
{
"name": "Vercel",
"category": "hosting",
"confidence": 0.99,
"version": null
},
{
"name": "Google Analytics 4",
"category": "analytics",
"confidence": 0.95,
"version": null
},
{
"name": "HubSpot",
"category": "marketing_automation",
"confidence": 0.92,
"version": null
},
{
"name": "Intercom",
"category": "live_chat",
"confidence": 0.88,
"version": null
},
{
"name": "Stripe",
"category": "payment",
"confidence": 0.85,
"version": null
}
],
"meta": {
"total_detected": 6,
"categories_covered": 6
}
}
Filtering by Category
If you only care about specific technology categories, you can pass an optional categories array in the request body to narrow the results:
curl -X POST https://api.rodz.io/v1/enrich/tech-stack \
-H "Authorization: Bearer $RODZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"domain": "acme.com",
"categories": ["analytics", "marketing_automation", "crm"]
}'
This is useful when you are running displacement campaigns and only need to know whether a prospect uses a specific category of tool. It also reduces response size when you are processing thousands of domains in bulk.
Endpoint 2: Website Traffic Estimation
What It Returns
The POST /enrich/website-traffic endpoint returns estimated traffic metrics for a given domain. The response includes monthly visit estimates, a breakdown by traffic source (direct, organic search, paid search, social, referral, email), top organic keywords driving traffic and a geographic distribution of visitors.
Traffic data is estimated, not measured. Rodz combines clickstream panel data, search ranking signals and public analytics benchmarks to produce approximations. The numbers will not match the prospect’s internal Google Analytics dashboard exactly, but they are directionally accurate and consistent enough to segment prospects by scale.
Why It Matters for Prospecting
Traffic data serves two main purposes in a sales workflow:
Qualification. Monthly visitors act as a proxy for company maturity and market traction. A B2B SaaS company pulling 200,000 monthly organic visitors is in a different league than one with 2,000. If your product is priced for mid-market companies, filtering by traffic range helps you avoid wasting time on early-stage startups or enterprise giants that require a different sales motion entirely.
Personalisation. Knowing a prospect’s top traffic sources lets you craft relevant messaging. If 70% of their traffic comes from organic search, they clearly invest in SEO, and your content marketing platform might resonate. If paid search dominates, they are spending money on acquisition and might appreciate a tool that improves conversion rates. If referral traffic is unusually high, they likely have a strong partnership or affiliate program.
cURL Example
curl -X POST https://api.rodz.io/v1/enrich/website-traffic \
-H "Authorization: Bearer $RODZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"domain": "acme.com"
}'
Sample Response
{
"domain": "acme.com",
"estimated_at": "2026-03-01T00:00:00Z",
"period": "2026-02",
"monthly_visits": 345000,
"traffic_sources": {
"organic_search": 0.52,
"direct": 0.23,
"paid_search": 0.11,
"social": 0.08,
"referral": 0.04,
"email": 0.02
},
"top_organic_keywords": [
{ "keyword": "project management software", "position": 3, "volume": 18000 },
{ "keyword": "task tracking tool", "position": 5, "volume": 9500 },
{ "keyword": "acme project manager", "position": 1, "volume": 6200 }
],
"geography": {
"US": 0.41,
"GB": 0.14,
"DE": 0.09,
"FR": 0.08,
"CA": 0.06,
"other": 0.22
},
"meta": {
"confidence": "medium",
"data_freshness": "2026-02-28"
}
}
Specifying a Time Period
By default, the endpoint returns the most recent complete month. You can request a specific month by passing the period parameter:
curl -X POST https://api.rodz.io/v1/enrich/website-traffic \
-H "Authorization: Bearer $RODZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"domain": "acme.com",
"period": "2026-01"
}'
Historical data is available for up to 12 months. This is particularly useful for spotting traffic trends, such as a sudden spike in paid search that suggests the company just launched an aggressive acquisition campaign.
Endpoint 3: Homepage Content Extraction
What It Returns
The POST /enrich/homepage-content endpoint fetches a company’s homepage and returns structured content extracted from it. This includes the page title, meta description, the primary headline (H1), secondary headings (H2s), the main body text, any call-to-action labels detected and Open Graph metadata.
The extraction is not a raw HTML dump. Rodz parses the page, strips navigation, footers and boilerplate elements, and returns clean, structured text that represents the company’s core messaging. This is the content the company deliberately chose to put front and centre for every visitor.
Why It Matters for Prospecting
Homepage content is the most underused data point in outbound sales. Most reps never read a prospect’s homepage before reaching out, and it shows. The company’s own words tell you:
- What problem they solve. The H1 and primary body text almost always describe the core value proposition in the company’s own language. Mirroring that language in your outreach creates instant rapport.
- Who they sell to. Many homepages explicitly mention their target audience (“for engineering teams”, “built for e-commerce brands”). This confirms whether the company fits your ICP.
- What stage they are at. A homepage that says “Trusted by 5,000 companies” signals a different maturity than one that says “Join our beta”.
- Recent changes. If the homepage headline changed since your last check, the company may have pivoted, launched a new product or rebranded. These are all conversation starters.
When combined with tech stack and traffic data, homepage content gives you a three-dimensional view of the prospect that no CRM field can match.
cURL Example
curl -X POST https://api.rodz.io/v1/enrich/homepage-content \
-H "Authorization: Bearer $RODZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"domain": "acme.com"
}'
Sample Response
{
"domain": "acme.com",
"fetched_at": "2026-03-08T14:25:12Z",
"content": {
"title": "Acme | Project Management for Modern Teams",
"meta_description": "Acme helps teams plan, track and deliver projects on time. Trusted by 5,000+ companies worldwide.",
"h1": "Ship projects faster with less chaos",
"h2s": [
"Plan with clarity",
"Track without micromanaging",
"Integrate with the tools you already use",
"Trusted by teams at Stripe, Notion and Linear"
],
"body_text": "Acme is the project management platform that keeps distributed teams aligned. Create tasks, set milestones, automate status updates and get a real-time view of every project. No more Monday-morning surprises. No more status meetings that could have been a dashboard.",
"ctas": ["Start free trial", "Book a demo"]
},
"open_graph": {
"og_title": "Acme | Project Management for Modern Teams",
"og_description": "Plan, track and deliver projects on time.",
"og_image": "https://acme.com/og-image.png"
},
"meta": {
"language_detected": "en",
"word_count": 87
}
}
Extracting Specific Sections
If you only need certain parts of the homepage content, pass a fields array to limit the extraction:
curl -X POST https://api.rodz.io/v1/enrich/homepage-content \
-H "Authorization: Bearer $RODZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"domain": "acme.com",
"fields": ["h1", "meta_description", "ctas"]
}'
This reduces payload size and processing time when you are running bulk extractions and only need specific signals, like whether the company offers a free trial (check the CTAs) or what their primary tagline is (check the H1).
Combining All Three Endpoints
Each endpoint is useful on its own. The real power emerges when you combine all three into a unified enrichment workflow. Here is a practical approach.
Step 1: Start with a Domain List
Prepare a list of target domains. This could come from your CRM export, a LinkedIn Sales Navigator search, or any other prospecting source. Make sure each entry is a clean root domain.
Step 2: Run Tech Stack Detection
For each domain, call POST /enrich/tech-stack. Store the results and flag any domains that run technologies relevant to your product. If you sell a Salesforce alternative, flag every domain running Salesforce. If you sell an analytics platform, flag every domain running Google Analytics or Mixpanel.
Step 3: Run Website Traffic Estimation
For the flagged domains, call POST /enrich/website-traffic. Use the monthly visit count to qualify: does the company have enough traction to afford your product? Is it too large for your current sales motion? Filter the list down to your sweet spot.
Step 4: Run Homepage Content Extraction
For the qualified domains, call POST /enrich/homepage-content. Extract the H1, body text and CTAs. Use this content to personalise your outreach. Mirror the prospect’s language. Reference their value proposition. Mention their target audience.
Step 5: Build the Enriched Profile
Combine the outputs from all three endpoints into a single enriched company profile. Here is what the combined data might look like for a single prospect:
{
"domain": "acme.com",
"tech_stack_summary": {
"framework": "Next.js 14.1",
"hosting": "Vercel",
"analytics": "Google Analytics 4",
"marketing": "HubSpot",
"chat": "Intercom",
"payment": "Stripe"
},
"traffic_summary": {
"monthly_visits": 345000,
"primary_source": "organic_search (52%)",
"top_keyword": "project management software"
},
"content_summary": {
"tagline": "Ship projects faster with less chaos",
"audience": "distributed teams",
"social_proof": "5,000+ companies",
"cta": "Start free trial"
}
}
With this profile, a sales rep can write a first-touch message that references the prospect’s tech choices, acknowledges their market traction and speaks in the prospect’s own language. That is a fundamentally different outreach experience from a generic template.
A Note on Rate Limits
Each enrichment call counts as one request against your rate limit (100 requests per minute on all plans). When processing large domain lists, batch your calls and respect the limit. A simple approach is to process one domain every 600 milliseconds, which keeps you comfortably under the ceiling. For full details on rate limiting and retry strategies, see the API Reference.
Error Handling
All three endpoints use the same error response structure. Here are the most common scenarios:
| HTTP Status | Meaning | What to Do |
|---|---|---|
400 | Invalid request body (e.g. missing domain field) | Check your JSON payload. The domain field is required. |
401 | Missing or invalid API key | Verify your Bearer token is set correctly. |
404 | Domain not found or unreachable | The domain may be offline, parked or blocking automated requests. Skip and move on. |
422 | Domain format invalid | Pass a clean root domain without protocol or path (e.g. acme.com, not https://acme.com/about). |
429 | Rate limit exceeded | Wait and retry. The Retry-After header tells you how many seconds to pause. |
500 | Internal server error | Retry after a few seconds. If persistent, contact support. |
Error responses always include a code and message field in the JSON body:
{
"error": {
"code": "DOMAIN_NOT_FOUND",
"message": "The domain 'xyz123.com' could not be resolved or is unreachable."
}
}
Frequently Asked Questions
How fresh is the tech stack data?
Rodz refreshes tech stack data on a rolling basis. Popular domains (high traffic, frequently queried) are scanned weekly. Less popular domains are refreshed every 30 days. When you make a request, the detected_at timestamp in the response tells you exactly when the last scan ran. If you need a fresh scan, you can pass "force_refresh": true in the request body, though this costs an additional API credit.
How accurate are the traffic estimates?
Traffic estimates are directionally accurate, not precise. Expect the numbers to be within 20-40% of actual traffic for most domains. The estimates are most reliable for domains with 10,000+ monthly visitors. For very small sites (under 1,000 visitors), the margin of error increases. Use traffic data for segmentation and qualification, not for reporting exact numbers to a prospect.
Can I enrich domains in bulk?
Each endpoint accepts a single domain per request. For bulk processing, loop through your domain list and make one call per domain. Respect the rate limit of 100 requests per minute. If you have a large list (10,000+ domains), consider spreading the processing over several hours or requesting a rate limit increase through the Rodz dashboard.
What happens if a domain uses a CDN or reverse proxy?
CDNs and reverse proxies (Cloudflare, Fastly, Akamai) can mask the underlying tech stack. Rodz uses multiple detection methods, including DNS analysis, HTTP header inspection and JavaScript payload scanning, to detect technologies even behind CDNs. However, some technologies may be missed when a site is heavily proxied. The confidence score in the response reflects this uncertainty: a score below 0.7 means the detection is less certain.
Does homepage content extraction work for single-page applications?
Yes. Rodz renders JavaScript before extracting content, so SPAs built with React, Vue, Angular or similar frameworks are fully supported. The extraction engine waits for the page to finish rendering before parsing the DOM. This means dynamically loaded content (lazy-loaded sections, client-side routing) is captured in most cases.
What if the homepage is not in English?
The endpoint extracts content regardless of language. The language_detected field in the response tells you what language the page is written in. If you need to filter for English-only content, check this field after the call. The extracted text is returned as-is, without translation.
How do I handle domains that redirect?
If a domain redirects (e.g. acme.com redirects to www.acme.com or app.acme.com), Rodz follows the redirect chain and analyses the final destination. The response includes the resolved URL so you know exactly which page was processed. If a domain redirects to a completely different domain (e.g. after an acquisition), the response will reflect the content of the destination domain.
Can I use these endpoints for competitor monitoring?
Absolutely. Run the three endpoints on your competitors’ domains on a regular schedule. Track changes in their tech stack (did they switch analytics providers?), monitor their traffic trends (are they growing or shrinking?) and watch their homepage messaging (did they change their positioning?). This gives you competitive intelligence that is fresher and more granular than most market research reports.
What to Read Next
This guide covered the three digital presence enrichment endpoints. To continue building your Rodz API integration:
- API Reference for the complete endpoint catalogue, rate limit details and response format specifications.
- Getting Started if you still need to set up authentication and make your first request.
- Interactive API docs to test endpoints directly from your browser with your API key.
Digital presence data is most powerful when combined with intent signals. A company that just raised a Series B, runs your competitor’s product and gets 200,000 monthly organic visitors is not just a prospect. It is a priority.