Skip to main content
Glama

rowfeed/website-contact-finder

rowfeed--website-contact-finder
Destructive

This tool calls the Actor "rowfeed/website-contact-finder" and retrieves its output results. Actor description: Find company emails, phone numbers, social profiles and address from any website's own contact pages. Bulk lists or an Apify dataset. GDPR-safe role addresses only. $2 per 1,000 websites with an email or phone; the rest are free.

Input Schema

NameRequiredDescriptionDefault
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
websitesNoCompany websites or domains, one per line (acme.com, https://www.acme.co.uk ...). Duplicates are removed. Up to 10,000 per run. Example values: ["plausible.io","tibber.com","ghost.org"]
datasetIdNoE.g. the results of a Google Maps, SERP or leads run. The website is read from the field below, or from website / url / domain automatically.
datasetFieldNoLeave empty to use website, url or domain automatically.
maxPagesPerSiteNoThe home page plus contact, about and imprint pages. 5 finds almost everything; the price is per website, not per page. Example values: 5

Output Schema

NameRequiredDescriptionDefault
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Added value: +{
      +  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      +  "properties": {
      +    "address": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "checked_at": {
      +      "type": "string"
      +    },
      +    "company_name": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "domain": {
      +      "type": "string"
      +    },
      +    "email": {
      +      "type": "string"
      +    },
      +    "emails": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "facebook": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "found": {
      +      "type": "boolean"
      +    },
      +    "instagram": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "linkedin": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "pages_checked": {
      +      "type": "number"
      +    },
      +    "personal_emails_skipped": {
      +      "type": "number"
      +    },
      +    "phone": {
      +      "type": "null"
      +    },
      +    "phones": {
      +      "items": {},
      +      "type": "array"
      +    },
      +    "pinterest": {
      +      "type": "null"
      +    },
      +    "tiktok": {
      +      "type": "null"
      +    },
      +    "website": {
      +      "type": "string"
      +    },
      +    "x": {
      +      "type": [
      +        "null",
      +        "string"
      +      ]
      +    },
      +    "youtube": {
      +      "type": "null"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Removed value: -{
      -  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      -  "properties": {
      -    "address": {
      -      "type": [
      -        "null",
      -        "string"
      -      ]
      -    },
      -    "checked_at": {
      -      "type": "string"
      -    },
      -    "company_name": {
      -      "type": [
      -        "null",
      -        "string"
      -      ]
      -    },
      -    "domain": {
      -      "type": "string"
      -    },
      -    "email": {
      -      "type": "string"
      -    },
      -    "emails": {
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "facebook": {
      -      "type": [
      -        "null",
      -        "string"
      -      ]
      -    },
      -    "found": {
      -      "type": "boolean"
      -    },
      -    "instagram": {
      -      "type": [
      -        "null",
      -        "string"
      -      ]
      -    },
      -    "linkedin": {
      -      "type": [
      -        "null",
      -        "string"
      -      ]
      -    },
      -    "pages_checked": {
      -      "type": "number"
      -    },
      -    "personal_emails_skipped": {
      -      "type": "number"
      -    },
      -    "phone": {
      -      "type": "null"
      -    },
      -    "phones": {
      -      "items": {},
      -      "type": "array"
      -    },
      -    "pinterest": {
      -      "type": "null"
      -    },
      -    "tiktok": {
      -      "type": "null"
      -    },
      -    "website": {
      -      "type": "string"
      -    },
      -    "x": {
      -      "type": [
      -        "null",
      -        "string"
      -      ]
      -    },
      -    "youtube": {
      -      "type": "null"
      -    }
      -  },
      -  "type": "object"
      -}
  3. Added

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations present the bar is lower, and the description does add real value: per-website pricing ($2 per 1,000 websites yielding an email or phone, others free) and the GDPR constraint limiting output to role addresses. But it does not explain the destructiveHint=true annotation, nor what running the Actor actually changes or creates (a run and dataset). Pricing and compliance are the only behavioral disclosures beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is pure boilerplate about calling an Actor and retrieving results, but the second sentence is dense and front-loaded with the useful facts (what it finds, bulk/dataset modes, GDPR, pricing). Overall compact but with one wasted opening sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All five parameters are richly documented in the schema, an output schema exists so return values need no explanation, and the description covers scope, limits and cost. The remaining gap is the unexplained destructiveHint=true and the lack of any note on run/dataset side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in detail, including waitSecs semantics and the datasetField fallback. The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: find company emails, phone numbers, social profiles and addresses from a website's own contact pages. That clearly separates it from sibling scrapers like rowfeed--google-maps-scraper or rowfeed--website-technology-checker. The first sentence is generic wrapper boilerplate ('calls the Actor ... retrieves its output results') that adds nothing, but the Actor description does the real work.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Bulk lists or an Apify dataset' implies two distinct input modes, which the schema then maps to `websites` vs `datasetId`. However, there is no guidance on when to prefer this tool over related siblings (e.g., Google Maps scraper for place contact data) and no stated prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.