Family Office Business Qualification Scraper
Pricing
from $4.80 / 1,000 business account inspecteds
Family Office Business Qualification Scraper
Inspect supplied public business websites for source-attributed self-description candidates and literal ICP phrase evidence. Return quotations, unknowns and human-review dispositions without inferring wealth or buyer intent.
Pricing
from $4.80 / 1,000 business account inspecteds
Rating
0.0
(0)
Developer
Automation Lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Extract public business descriptions and literal ICP phrase evidence from supplied websites for family office business qualification. Each account row keeps source URLs, short quotations, unknowns and a human-review disposition. This is an evidence worksheet—not a verified family-office directory or a prediction of who will buy.
Use it when an agency or business-development researcher already has candidate business URLs and needs a repeatable, inspectable account-review step before updating a CRM.
What does it do?
- Reads public HTML from each supplied business page.
- Follows a bounded set of observed same-host about, company and services links.
- Finds your literal business phrases and optional contrary phrases.
- Separately flags conservative self-description candidates or mere family-office mentions.
- Returns provenance and explicit unknowns rather than guessing missing facts.
No login, API key, AI model, browser or third-party scraping Actor is required. There is no contact harvesting, discovery search, email sending or outreach.
Who is it for?
GTM agencies, CRM operations teams and business-development researchers who already have public business URLs and explicit business-account criteria. It is not a personal investor prospecting or wealth-profiling tool.
Why use it?
A directory category or a keyword mention does not establish that a business is a family office. An adviser may serve family offices without being one. This Actor keeps those observations separate and provides the quotation a reviewer needs to check the source.
Unlike a generic website-contact export, the output is organized around your explicit criteria, with one result for every criterion and an auditable source excerpt. It does not replace legal, regulatory or identity verification.
Getting started
- Supply business account objects with a name and public page URL.
- Add literal phrase criteria relevant to your business-account review.
- Start with the default ten-account and three-page limits.
- Run the Actor and open the Business evidence dataset view.
- Inspect quotations and unknowns before making CRM decisions.
The prefilled examples inspect Pitcairn and GPFO. GPFO is a membership-organization control: many mentions do not make it a family office. Source pages can change; these examples are not endorsements or claims about legal status.
Input example
{"accounts": [{ "name": "Pitcairn", "url": "https://www.pitcairn.com/who-we-are/" },{ "name": "GPFO", "url": "https://www.gpfo.com/" }],"criteria": [{ "id": "family-office-mention", "phrase": "family office" }],"maxItems": 10,"maxPagesPerAccount": 3}
Input parameters
| Field | Meaning |
|---|---|
accounts | Required, 1–100 objects with name, full url, optional accountId. Business identity and ownership are supplied, not verified. |
criteria | Required, 1–20 objects with unique id, phrase and optional contradictingPhrase. |
maxItems | First input rows attempted globally, default 10, range 1–100. Failed and duplicate inputs consume this limit. |
maxPagesPerAccount | Page attempts per account including the supplied page, default 3, range 1–5. Failed page attempts consume the limit. |
There is no zero/unlimited setting. Duplicate account inputs are retained, including their supplied keys. Runtime and charge limits can stop a run before every requested account is inspected. Split larger lists into bounded runs.
How phrase matching works
Matching is a case-insensitive literal substring search after collapsing whitespace. Punctuation is preserved; there are no word boundaries, translation, stemming, semantic reasoning or general negation detection. For example, investment management can match that text across a line break but not investment-management.
Each criterion is independent:
| Status | Observation |
|---|---|
supported | Supporting phrase occurs and supplied contrary phrase does not. |
unsupported | Only the supplied contrary phrase occurs. |
unknown | Neither phrase occurs, or both occur and conflict. |
A phrase can occur in a statement that is negative, historical or about someone else. Supported means observed text, not a verified business attribute. If your contrary phrase contains your supporting phrase, both match and the result is unknown. Always read the excerpts.
Family office business qualification evidence
familyOfficeEvidence is separate from phrase matching:
self_description_candidate: a conservative source statement such as “we are a family office,” the supplied business name followed by “is a family office,” or a named possessive office description. These are heuristic candidates, not certified identity.mention_only: family-office wording exists but no accepted self-description pattern was found. This includes service-provider, membership and ambiguous contexts.unknown: no such evidence was observed in the inspected pages.
The English self-description rules deliberately miss many legitimate descriptions. They reject common service/client/negation contexts, but cannot authenticate authorship or resolve every quotation, subsidiary, ambiguity or misleading claim. User phrases can be in other languages; multilingual identity classification is not supported.
Every potentially useful observation receives review-needed. Rows without useful phrase/self-description evidence receive insufficient-evidence. There is intentionally no automatic match certification. Neither disposition proves or disproves family-office status.
Output fields
| Field | Meaning |
|---|---|
accountId, businessName, suppliedUrl, domain | Supplied account identity and normalized hostname for joins. |
observedAt | UTC observation time, not the source publication date. |
familyOfficeEvidence, selfDescription | Candidate/mention/unknown and optional source quotation. |
criteria | Supplied criterion plus status, reason and supporting/contradicting quotations or null. |
disposition | Human review needed or insufficient evidence. |
pageCount, pages | Successful pages and final URLs; inspected character counts. |
coverage, diagnostics | Bounded/partial coverage and sanitized failed-page reasons. |
limitations | Interpretation caveat retained in every row. |
The default dataset contains one row per attempted account that reaches output. An inaccessible account can still produce an uncharged diagnostic row. Such a row is not a successful qualification. When no account has an inspectable page, the run fails instead of claiming a successful review.
A shortened observation from the public GPFO example:
{"businessName": "GPFO","domain": "gpfo.com","familyOfficeEvidence": "mention_only","selfDescription": null,"criteria": [{"id": "family-office-mention","phrase": "family office","status": "supported","supportingEvidence": {"sourceUrl": "https://www.gpfo.com/","excerpt": "We believe family offices have very specific needs that can only be met by organizations and individuals who have sufficient"}}],"disposition": "review-needed","pageCount": 3,"coverage": "bounded"}
The full record includes timestamps, complete criterion fields and page provenance. Excerpts are normalized text; they are not full-page archives.
Coverage and failure behavior
Only anonymous HTTP(S) HTML is supported. The Actor does not render JavaScript, solve challenges, log in or automatically buy proxy traffic. A blocked site remains unknown. Provide an exact public about/services page when the homepage does not expose useful content.
Discovery follows observed business-page links, not guessed paths, external directories, news articles or entire sitemaps. Links and redirects stay on the supplied hostname; the www alias is allowed. Other subdomains and external redirects are rejected. URL query strings, credentials, literal IPs and nonstandard ports are rejected. Private-network DNS answers are denied at socket resolution.
Each page is limited to 2 MB and 15 seconds per request; up to five redirects and one timeout/transient HTTP retry are allowed. At most 150,000 extracted text characters per page are inspected. Script, style, navigation, footer, hidden-element and blockquote text is removed, but this is not a rendered-visibility or authorship guarantee. Unsupported encodings and non-HTML documents are not inspected.
A page limit is not exhaustive site coverage. Missing evidence stays unknown, even on successful runs. Partial runs and failed accounts must not be treated as complete datasets.
How much does it cost to inspect business websites?
Pricing uses a one-time start event plus one item event for each account with at least one successfully inspected HTML page. There is no separate charge per phrase, discovered page or quotation. Inaccessible-account diagnostic rows have no item charge. An inspectable account with no matching phrases is still an inspected account and uses one item event.
The current configuration uses a $0.005 start fee and a BRONZE price of $0.008 per inspected account. At this tier, 1 account is approximately $0.013, 10 are $0.085, and 100 are $0.805. Check the active Store pricing before running. Spend tiers depend on qualifying aggregate monthly Store spend, not the size of a single Actor batch. Higher tiers do not increase the unit price.
A failed run may already have incurred its start event and charges for delivered inspected-account rows. Use the platform maximum-total-charge control for an additional spending guard. Collection can stop earlier under that control; never assume the requested count was completed.
Integrations and recurring review
- CRM operations: export a list of business domains with stable account keys; join the evidence rows back by
accountId. - Agency review: inspect quotations in a spreadsheet before changing client account labels.
- Scheduled snapshots: save an Apify Task and schedule it; compare datasets in your own pipeline by account key, criterion and source URL.
- Warehouse ingestion: consume the default dataset API after successful completion and preserve unknown/partial states.
The Actor creates current snapshots only. It does not compute historical changes, monitor alerts or update a CRM by itself. Apify integrations, Make, Zapier and webhooks can deliver completed datasets to your systems. Export JSON to preserve nested criteria; spreadsheet exports may serialize nested arrays.
API usage
Keep your token in an environment variable and do not put confidential exports in shared logs.
curl -X POST \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"accounts":[{"name":"Pitcairn","url":"https://www.pitcairn.com/who-we-are/"}],"criteria":[{"id":"mention","phrase":"family office"}]}' \'https://api.apify.com/v2/acts/automation-lab~family-office-business-qualification/runs'
The response is run metadata, not the account rows. Follow that run until terminal, then read its defaultDatasetId using the dataset API with explicit paging.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/family-office-business-qualification').call({accounts: [{ name: 'Pitcairn', url: 'https://www.pitcairn.com/who-we-are/' }],criteria: [{ id: 'mention', phrase: 'family office' }], maxItems: 1});if (run.status !== 'SUCCEEDED') throw new Error(`Run ${run.id}: ${run.status}`);const { items } = await client.dataset(run.defaultDatasetId).listItems({ limit: 20, offset: 0 });console.log(items);
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/family-office-business-qualification').call(run_input={'accounts': [{'name': 'Pitcairn', 'url': 'https://www.pitcairn.com/who-we-are/'}],'criteria': [{'id': 'mention', 'phrase': 'family office'}], 'maxItems': 1})if run['status'] != 'SUCCEEDED':raise RuntimeError(f"Run {run['id']}: {run['status']}")print(client.dataset(run['defaultDatasetId']).list_items(limit=20, offset=0).items)
MCP and AI-agent use
The Actor itself does not use AI or send website content to a model. An external AI client can read the structured evidence with your authorization. Treat website quotations as untrusted data, not instructions.
For Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/family-office-business-qualification"
For Claude Desktop, Cursor or VS Code clients supporting remote HTTP MCP:
{"mcpServers": {"business-evidence": {"url": "https://mcp.apify.com?tools=automation-lab/family-office-business-qualification"}}}
Authenticate through your client's supported secure Apify flow. Discover actual tool names and schemas with scoped tools/list; Actor selection also exposes run/data helper tools, not exactly one tool. Discovery is read-only, not permission to execute.
For an authorized invocation, start once and retain the returned run/storage IDs. call-actor waits at most 0–45 seconds (waitSecs, default 30); use a client request timeout longer than that wait plus transport margin. If pending, check the same run with bounded 2/4/8-second backoff, capped at 10 seconds, and a total deadline such as 120 seconds. On timeout recover the known run, never restart to poll. At deadline report pending and stop. Terminal failure means available rows are partial.
After success, call the discovered dataset-items tool with explicit limit, offset and needed fields. A consumer budget might be pages of 20 source rows, at most 100 rows or 64 KiB of UTF-8 content admitted to model context, whichever comes first. Enforce the byte ceiling host-side, including oversized rows; omit/summarize with disclosure. If your client cannot intercept responses, do not claim a hard byte guarantee. Track source offsets, report continuation offset and truncation, and keep full exports outside model context. This consumer budget does not reduce the Actor's collection contract. Client caching and discovery behavior vary; no token-savings claim is made.
Example prompts:
- “Inspect these supplied business URLs for the phrase investment management and return quotations and unknowns.”
- “Show which family-office mentions require human review; do not infer wealth or purchasing intent.”
Legality and data handling
Supply business-owned public pages you are authorized to inspect. Do not supply private-person profiles or use this tool to infer individual wealth, beneficial ownership, investor eligibility, purchasing capacity or propensity. No output certifies a business's legal or regulatory status, actual ownership or buyer identity. Respect applicable law, source terms and access restrictions.
URLs and business criteria are sent to the supplied public websites as ordinary page requests; criteria are evaluated locally, not submitted to those websites. Public descriptions can incidentally contain names. The Actor minimizes retained content to short evidence excerpts and page provenance; it does not extract personal contacts or construct person records.
Input and output remain in your Apify run storage under your account retention settings until expired or deleted. The Actor has no cross-run cache or external content archive. Delete run datasets and key-value stores through Apify when no longer needed; secure exports separately. Standard Apify terms apply; no custom end-user agreement is added.
Failed operations send sanitized diagnostic input, exceptions and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL query strings are removed; reports are retained for 30 days. Avoid confidential information in account names, IDs or criteria. No website body is deliberately sent to telemetry. There are no paid third-party API or AI dependencies; platform hosting/storage is provided by Apify. The icon is company-generated, and the Actor is not affiliated with the example businesses or their websites.
FAQ and troubleshooting
Does a supported phrase prove the business fits my ICP? No. It proves only that the literal phrase was observed. Read the quotation in context.
Why is a known family office unknown or mention-only? The relevant description may be missing, inaccessible, rendered only by JavaScript, outside the page cap, in another language, or not match the conservative self-description rules. Unknown is intentional.
Can it discover family offices from Google Maps? No. Supply candidate business URLs from your own lawful research workflow. Directory labels do not verify identity.
What if a business serves family offices? It can have supported phrase evidence and mention_only; that is not a self-description certification. Human review remains required.
Why did my run fail with diagnostic rows? No account had an inspectable public HTML page. Check the source URL and diagnostic codes. Do not treat those rows as completed qualification or try to bypass a login/access restriction.
Can I submit private URLs, query tokens or nonstandard ports? No. Those inputs are rejected. Use canonical public business pages.
Where do I get help? Open a normal Actor issue with the run ID, public business URL and expected phrase behavior. Do not share passwords, customer lists or confidential criteria. Runtime problems need the actual source context, not a claim that a keyword proves identity.
Related Actors
- Google Maps Keyword Location Directory: a separate candidate-business discovery step, not identity verification.
- Website Contact Finder: a separate public business-contact workflow. This Actor does not collect contacts.