Website Sales Signals — Tech Stack, Contacts, SEO & Gaps
Pricing
from $10.00 / 1,000 analyzed websites
Website Sales Signals — Tech Stack, Contacts, SEO & Gaps
For each website: tech stack (1,178 rules), role emails and phones, company identity, hosting, SEO and mail checks, and missing tools with evidence, lead score and sales hooks.
Pricing
from $10.00 / 1,000 analyzed websites
Rating
0.0
(0)
Developer
Attila Kis
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Website Sales Signals
Give the Actor a list of websites. For each website it returns what the site uses, how to contact the company, and what the site does not have. The result is made for sales prospecting: each missing item is a possible reason to contact the company.
All detection is rule-based. No LLM, no browser, no proxy, no owned database. The output is company data; see Personal data for the limits.
Output detail
compact (default) is made for lists and CRM import: summary, platform, company, contact, technologySummary, toolBudget, domainInfo, dns, opportunities, salesHooks, flags, targetMatch, leadScore, checkSummary, dataQuality. About half the size of the full result.
full adds the detail blocks: technologies with evidence and versions, features, checks, privacy, pagesRead.
summary is one short text for people and AI agents, for example:
Csavarker Kft. (HU). Platform: UNAS. Contact: info@csavarker.hu, +36 30 643 0000. Tools: Hotjar. Tool budget: small_business. Lead score: 94 (tier A). Top opportunities: No live chat or chatbot detected; …
A parked domain (for sale, registrar placeholder) gets flags.isParkedDomain, lead score 0 and no opportunities.
Sample output
Part of a real compact result (Apify cloud run, 2026-09-30):
{"website": "csavarker.hu","status": "complete","summary": "Csavarker Kft. (HU). Platform: UNAS. Contact: info@csavarker.hu, +36 30 643 0000. Tools: Hotjar. Tool budget: small_business. Lead score: 94 (tier A). Top opportunities: No live chat or chatbot detected; ...","platform": "UNAS","company": {"name": "Csavarker Kft.","legalName": "Csavarker Kft.","country": {"code": "HU", "confidence": "high"},"registrationIds": [{"type": "tax_number", "country": "HU", "value": "11098539-2-06", "pageKind": "contact"}]},"contact": {"primaryEmail": "info@csavarker.hu","primaryPhone": "+36 30 643 0000","socialProfiles": {"facebook": "https://www.facebook.com/csavarker", "tiktok": "https://www.tiktok.com/@csavarkerkft"}},"hosting": {"hostedOn": "Rackforest Zrt.", "cdn": null, "originHidden": false, "dnsProvider": "Forpsi"},"opportunities": [{"id": "no_live_chat", "category": "chat_support", "title": "No live chat or chatbot detected", "confidence": "high"}],"salesHooks": [{"category": "chat_support", "opportunityId": "no_live_chat", "confidence": "high","text": "Csavarker Kft. has no chat on the website, so visitors with a question must call or write an email."}],"leadScore": {"score": 94, "tier": "A", "parts": {"contactability": 30, "opportunity": 35, "dataQuality": 15}}}
What you get for each website
| Block | Content |
|---|---|
technologies | 1,178 product rules in 64 categories: CMS, shop platform, analytics, advertising pixels, chat, chatbot, email marketing, booking, payments, consent tools, reviews, recruiting and more. Each result has evidence. |
contact | Role email addresses (info@, sales@, support@, …), phone numbers in E.164 format, each with the page where it was found, contact form, company social profiles. |
company | Name, logo URL, legal name and legal form, company registration and tax numbers, address, country, industry hints, founding year. |
features | Page types that the site links to, calls to action, forms, selling and hiring signals, content freshness, trust signals. |
checks | About 45 checks: on-page SEO, indexability, structured data, robots.txt, sitemap, llms.txt, performance, security headers, accessibility. |
privacy | Trackers, consent tools, policy pages. |
dns | Mail provider, SPF, DMARC and services that DNS TXT records verify (for example Microsoft 365, Stripe, Atlassian). |
hosting | Where the site runs: IP, network owner (for example Hetzner, OVHcloud), CDN, platform (Shopify behind Cloudflare), DNS provider. A CDN can hide the real host; originHidden says so. |
opportunities | What the site does not have, by category, with evidence and a confidence level. |
salesHooks | One ready sentence per opportunity category, for a sales message. |
targetMatch | Which of your target products or categories the site uses. |
leadScore | A 0–100 sorting score with tier A–D and the points of each part. |
toolBudget | Spend level from the paid tools that were detected: enterprise, mid_market, small_business, minimal. A lower bound. |
domainInfo | Domain registration date, expiry date, registrar, and the TLS certificate issuer and expiry. |
adLibraryLinks | Links to the Google Ads Transparency Center and the Meta Ad Library, to check if the company runs ads. |
flags | 25 yes/no columns (hasLiveChat, hasAdPixel, dmarcEnforced, …) for spreadsheet and CRM import. |
The word lists cover 17 languages. Kontakt, Contactez-nous, Contacto and Yhteystiedot are all contact pages.
Input
{"websites": ["apify.com", "https://www.allbirds.com"],"focus": ["chat_support", "seo"],"maxPagesPerWebsite": 4}
| Field | Default | Meaning |
|---|---|---|
websites | — | Up to 5000 domains or URLs. One result per host name. The Actor always starts at the home page. |
sourceDatasetId, sourceField | —, website | Read the websites from a dataset of another Actor, for example a Google Maps export. Give websites, a dataset, or both. |
skipDatasetId | — | The dataset of an earlier run. Websites in it are skipped and not charged. For scheduled runs on a list that grows. |
outputDetail | compact | compact or full; see below. |
focus | all | Keeps only these categories in opportunities. The other blocks do not change. |
maxPagesPerWebsite | 4 | Home page plus the best contact, legal notice, about and pricing pages. When these pages give no role email and no phone, the Actor reads up to 2 more pages to find a contact page. The value 1 reads the home page only. |
includeDns | true | MX, SPF, DMARC, TXT and hosting lookups. |
includeEvidence | true | Adds the matched URL, header or text to each technology and opportunity. |
maxConcurrency | 8 | Websites in parallel. Requests to one host are sequential. With the default 1 GB memory, 1,000 websites take about 25 minutes. |
requestDelayMs | 300 | Minimum time between two requests to one host. |
includeDomainInfo | true | One RDAP request and one TLS handshake per website. |
targetTechnologies | none | Product names (Klaviyo) or category ids (chat). Fills targetMatch. |
onlyTargetMatches | false | Keep only websites that use a target. |
onlyWithOpportunities | false | Keep only websites with an opportunity in the selected categories. |
requireEmail, requirePhone | false | Keep only websites with a role email or a phone number. |
countries | all | Keep only these two-letter country codes. |
minLeadScore | 0 | Keep only websites with at least this score. |
A website that a filter removes is not stored. It is charged with the lower website-filtered event, because the Actor did the same work. The run summary counts the removed websites by reason.
Example: find users of a competitor with a contact address.
{"websites": ["shop-one.com", "shop-two.com"],"targetTechnologies": ["Klaviyo", "Mailchimp"],"onlyTargetMatches": true,"requireEmail": true}
Opportunity categories: chat_support, seo, advertising, email_marketing, analytics, web_development, ecommerce, booking, reviews, privacy_compliance, accessibility, email_security, localization, recruiting, ai_readiness.
How to read "not detected"
The Actor reads HTML. It does not run JavaScript. A tool that a tag manager, a JavaScript app or a shop platform loads at run time can be invisible.
For this reason each opportunity has a confidence:
| Value | Meaning |
|---|---|
high | The site is server-rendered and has no tag manager or app loader. A missing tool is very probably missing. |
medium | The site has a tag manager, a JavaScript framework or a hosted platform. The tool can load at run time. |
low | The result is partial, the page is client-rendered, or the rule is weak by nature. |
dataQuality.absenceConfidence gives the same value for the whole website. Use high results for automatic outreach and check medium results by hand.
Measured on 30 vendor websites (a vendor uses its own product): 27 of 31 expected technologies were found. All 4 misses were on websites with medium confidence.
Personal data
The Actor is built to output company data only.
- An email address is output only when its name is a role word (
info,sales,support,office, … in 17 languages). Other addresses are counted innonRoleEmailsNotOutputand not output. - Addresses in an obscured spelling are read and marked with
obfuscated: true:info [at] acme [dot] com,info (at) acme (dot) com, the word "at" in other languages, split markup, hidden decoy text, reversed text, data attributes and simple script concatenation. You can filter these out. - Encoded addresses (Cloudflare email protection, TYPO3 mail encryption) are not decoded.
encodedEmailNotDecodedreports them. - LinkedIn person profiles, Facebook
profile.phpandpeople/links, and share links are dropped. - Names of persons in structured data (
founder,employee,author, reviews) are never read. - Addresses of other organisations are dropped, also the mail link of the hosting provider on a legal notice page. A mail link on a contact page is kept, because some companies use another domain for mail.
Limits, found in a review of 220 small business outputs (2026-09-30):
- A sole trader or a partnership can use a personal name as the business name (for example
Barbara Heinze,… GbR). The Actor cannot separate these. - Text that the site publishes about itself is copied: the page title, the meta description (
company.description) and short evidence snippets. This text can name persons that the site names, for example a chef or an editor.
Phone numbers are output because the site publishes them as a business contact.
An obscured spelling is a sign that the site owner does not want automatic collection. Check the rules for unsolicited business email in your country before you use these addresses.
Behaviour on the web
- User-Agent:
WebsiteSalesSignalsBot/0.1. - The Actor obeys
robots.txt. A website that disallows its home page gets the statusblocked. - No login, no CAPTCHA or challenge bypass, no proxy rotation.
- Per website:
robots.txt, home page, one HTTP redirect check, sitemap,llms.txt, up to three more pages, up to two pages of the contact search, three DNS mail queries, and up to five DNS queries for hosting (two of them to the free Team Cymru IP-to-ASN service).
Status and charging
status | Meaning | Charged |
|---|---|---|
complete | Home page and the selected pages were read | yes |
partial | Home page was read; another request failed | yes |
blocked | robots.txt or the server refused the request | no |
unreachable | DNS, TLS or network failure | no |
invalid | The input is not a public website address | no |
error | The analysis failed; this is a defect of the Actor | no |
Pay-per-event prices: website-analyzed $0.01 for a stored result (= $10 per 1,000 websites) and website-filtered $0.002 for a website that your filters removed. Blocked, unreachable and invalid websites are free. The run summary is in the key-value store record RUN_SUMMARY.
With a spending limit on the run (for example the monthly free credit), the Actor stops when the limit is reached. You pay only for the stored results, and RUN_SUMMARY shows stoppedByChargeLimit: true.