# FeaturedCustomers Customer References Scraper (`automation-lab/featuredcustomers-customer-references-scraper`) Actor

Extract public FeaturedCustomers case studies and testimonials into structured B2B customer-reference intelligence. Locked records are excluded.

- **URL**: https://apify.com/automation-lab/featuredcustomers-customer-references-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Marketing, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## FeaturedCustomers Customer References Scraper

Extract public case studies and testimonials from FeaturedCustomers vendor profiles into structured customer-reference intelligence.

Give the Actor one or more vendor URLs and receive customer names, reference IDs, case-study titles, testimonial quotes, attributed contacts, source links, public PDF links, and logo URLs. Locked or blurred cards are never accessed or returned.

### What this Actor does

FeaturedCustomers Customer References Scraper turns the anonymously visible customer proof on vendor pages into an integration-ready dataset.

It supports both public reference surfaces:

- vendor case studies;
- vendor testimonials.

The Actor uses server-rendered HTML rather than a browser. This keeps runs lightweight while preserving the useful fields shown on public cards.

You can run the same input on a schedule to identify additions to competitor customer portfolios or refresh an internal proof library.

### Who is this for

#### Competitive-intelligence teams

Batch competitor vendor URLs to map which customers they publicly feature and what outcomes they highlight.

#### Customer-marketing teams

Export customer names, stories, PDFs, quotes, and attributed roles into a research or content-planning workflow.

#### Product marketers

Compare reference themes and customer segments across several B2B vendors.

#### Sales and enablement teams

Build a source-linked collection of public customer proof for account research and battlecards.

#### Data teams

Send normalized results to a warehouse, spreadsheet, CRM enrichment pipeline, webhook, or scheduled monitoring job.

### Why use this Actor

- **Two reference types:** case studies and testimonials use one consistent output contract.
- **URL-driven scope:** provide exact vendor profiles instead of relying on ambiguous keyword matching.
- **Public records only:** locked placeholders are skipped by construction.
- **Typed output:** every record includes a stable reference type and ID.
- **Global limit:** `maxItems` applies across all vendors and selected types.
- **Deduplication:** repeated vendor URLs do not create duplicate records in one run.
- **Lightweight extraction:** no browser or media download is required.
- **Source traceability:** each row keeps the exact FeaturedCustomers source page.

### Extracted data

| Field | Meaning |
| --- | --- |
| `vendor` | Vendor name displayed by FeaturedCustomers |
| `vendorSlug` | Stable vendor slug from the profile URL |
| `referenceType` | `caseStudy` or `testimonial` |
| `referenceId` | FeaturedCustomers reference ID |
| `customerName` | Customer featured in the public card |
| `customerLogoUrl` | Public customer logo URL, when available |
| `title` | Case-study title; null for testimonials |
| `quote` | Testimonial quote; null when absent |
| `contactName` | Publicly attributed contact, when available |
| `contactTitle` | Publicly attributed contact role, when available |
| `originalStoryUrl` | Original vendor-hosted story, when available |
| `pdfUrl` | Public FeaturedCustomers PDF URL, when available |
| `sourceUrl` | Exact vendor reference page parsed |
| `scrapedAt` | ISO 8601 extraction timestamp |

Nullable fields remain `null` rather than being replaced with invented values.

### Getting started

1. Open the Actor in Apify Console.
2. Add one or more FeaturedCustomers vendor URLs.
3. Select case studies, testimonials, or both.
4. Set the maximum number of references to save.
5. Leave proxy use disabled unless your network requires it.
6. Click **Start**.
7. Open the default dataset to export JSON, CSV, Excel, XML, or another supported format.

A small working input is:

```json
{
  "vendorUrls": [
    { "url": "https://www.featuredcustomers.com/vendor/slack" }
  ],
  "referenceTypes": ["caseStudy", "testimonial"],
  "maxItems": 20
}
```

### Input parameters

#### `vendorUrls`

Required array of FeaturedCustomers vendor URLs.

Accepted shapes include:

- `https://www.featuredcustomers.com/vendor/slack`
- `https://www.featuredcustomers.com/vendor/slack/case-studies`
- `https://www.featuredcustomers.com/vendor/slack/testimonials`

A type-specific URL is normalized to the vendor profile. The `referenceTypes` setting remains the authoritative filter, so explicit and profile URLs behave consistently.

URLs on other domains or non-vendor FeaturedCustomers pages fail validation.

#### `referenceTypes`

Array containing one or both values:

- `caseStudy`
- `testimonial`

The default extracts both.

#### `maxItems`

Maximum total records saved across all vendors and types.

- minimum: `1`;
- maximum: `10000`;
- default: `100`.

The Actor stops saving as soon as this global limit is reached.

#### `proxyConfiguration`

Optional Apify Proxy or custom proxy configuration.

Direct HTTP works for the public pages under normal conditions and has the lowest transfer cost. Configure a proxy only when your environment or geography requires one.

### Output example

A current public case-study record has this shape:

```json
{
  "vendor": "Slack",
  "vendorSlug": "slack",
  "referenceType": "caseStudy",
  "referenceId": "34990",
  "customerName": "The Times",
  "customerLogoUrl": "https://cdn.featuredcustomers.com/Company.logo_medium/the-times_20298.webp",
  "title": "Bridging team communication in the newsroom",
  "quote": null,
  "contactName": "Matthew Taylor",
  "contactTitle": "Digital Production Editor",
  "originalStoryUrl": "https://slack.com/intl/en-in/customer-stories/bridging-team-communication-newsroom",
  "pdfUrl": "https://cdn.featuredcustomers.com/CustomerCaseStudy.document/bridging-team-communication-newsroom.pdf",
  "sourceUrl": "https://www.featuredcustomers.com/vendor/slack/case-studies",
  "scrapedAt": "2026-07-25T03:09:13.246Z"
}
```

Testimonial rows use the same schema. Their `quote` contains the public quote while case-study-only fields are null.

### Pricing

This Actor uses pay per event pricing:

- **$0.005 per run start**;
- **$0.00001 per saved customer reference**.

The measured calculator-derived reference price is at Apify’s event-price floor for every plan tier. Failed, duplicate, locked, or rejected records are not charged as reference events.

Example totals:

| Saved references | Estimated Actor charge |
| ---: | ---: |
| 1 | $0.00501 |
| 10 | $0.00510 |
| 100 | $0.00600 |
| 1,000 | $0.01500 |

These examples cover Actor event charges. Optional proxy transfer can add platform usage according to the selected proxy configuration.

### Coverage and limits

FeaturedCustomers exposes a bounded anonymous sample on vendor pages. This Actor returns that public sample; it does not claim to export every record in the FeaturedCustomers database.

The Actor intentionally does not:

- unlock blurred or locked cards;
- sign in to a FeaturedCustomers account;
- bypass subscription controls;
- download PDF files into Actor storage;
- crawl unrelated pages from source links;
- infer missing contacts, companies, or outcomes.

Public page structure and available records can change. Use stable IDs and source URLs when comparing scheduled runs.

### Reliability and failure behavior

Requests have bounded timeouts and retries.

The Actor retries transient network failures, HTTP 429 responses, and temporary server errors with backoff. It does not repeatedly retry deterministic invalid URLs, normal 4xx responses, unsupported content types, or recognizable blocked pages.

A malformed input or unusable upstream response causes a failed run rather than a misleading successful run with zero records.

### Monitoring competitor customer proof

A repeatable monitoring workflow is:

1. Keep a list of competitor FeaturedCustomers vendor URLs.
2. Run the Actor daily or weekly with both reference types.
3. Store `referenceType` plus `referenceId` as the unique key.
4. Compare new results with the previous snapshot.
5. Route newly observed customers or stories to research, Slack, email, or a CRM review queue.

Apify schedules and webhooks can automate this process without maintaining a scraper server.

### Export and integration patterns

The default dataset works with:

- JSON and JSONL processing pipelines;
- CSV or Excel competitor matrices;
- Google Sheets through Apify integrations;
- Make and Zapier workflows;
- webhooks triggered after successful runs;
- data warehouses and BI tools;
- internal customer-proof search indexes.

For durable change tracking, persist the stable reference key rather than relying on row order.

### Run through the API with cURL

Replace `YOUR_TOKEN` with an Apify API token:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~featuredcustomers-customer-references-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "vendorUrls": [{"url": "https://www.featuredcustomers.com/vendor/slack"}],
    "referenceTypes": ["caseStudy", "testimonial"],
    "maxItems": 20
  }'
```

For production systems, send the token in an authorization header instead of a query string.

### JavaScript API example

Install the client:

```bash
npm install apify-client
```

Run the Actor and read its dataset:

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor(
  'automation-lab/featuredcustomers-customer-references-scraper'
).call({
  vendorUrls: [{ url: 'https://www.featuredcustomers.com/vendor/slack' }],
  referenceTypes: ['caseStudy', 'testimonial'],
  maxItems: 20,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Python API example

Install the client:

```bash
pip install apify-client
```

Then run:

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor(
    "automation-lab/featuredcustomers-customer-references-scraper"
).call(run_input={
    "vendorUrls": [{"url": "https://www.featuredcustomers.com/vendor/slack"}],
    "referenceTypes": ["caseStudy", "testimonial"],
    "maxItems": 20,
})

items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

### Use with Apify MCP

Add this Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/featuredcustomers-customer-references-scraper"
```

#### Claude Desktop

Add this JSON to your Claude Desktop MCP configuration:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/featuredcustomers-customer-references-scraper"
    }
  }
}
```

#### Cursor

Add the same `mcpServers.apify.url` entry in Cursor’s MCP settings, then reload the MCP tools list.

#### VS Code

Add the same HTTP MCP server URL in your VS Code MCP configuration and start the `apify` server from the MCP panel.

Example prompts:

- “Extract the public case studies and testimonials for these three FeaturedCustomers vendors.”
- “Return only case studies and limit the dataset to 50 references.”
- “Create a table of customer, vendor, contact role, story URL, and PDF URL.”

### Legality and responsible use

This Actor accesses only records presented anonymously on public FeaturedCustomers vendor pages.

You are responsible for your use of the data. Review the source website’s terms, robots guidance, contractual obligations, and applicable privacy, copyright, database, and data-protection laws.

Public attribution can include a person’s name and job title. Collect, retain, and share personal data only when you have a lawful purpose. Avoid intrusive profiling, spam, harassment, or decisions that could unfairly affect individuals.

The Actor is a technical data-extraction tool and does not provide legal advice.

### Troubleshooting

#### Why did my run fail immediately?

Check that every URL is a FeaturedCustomers vendor URL under `/vendor/{slug}`. Search pages, category pages, arbitrary websites, and empty URL lists are rejected.

#### Why are there fewer results than the profile count?

Anonymous vendor pages expose only a public sample. Locked cards and subscription-only records are out of scope and are skipped.

#### Why is a field null?

Case studies and testimonials expose different fields. For example, testimonial rows normally have no PDF or case-study title. The Actor preserves null values rather than guessing.

#### Should I enable a proxy?

Usually no. Start with direct HTTP. If your environment receives a network-level restriction, configure an Apify or custom proxy and rerun.

#### Does the Actor download PDFs?

No. It returns a public `pdfUrl` when FeaturedCustomers includes one. This avoids unnecessary storage and transfer cost.

### Related Automation Lab Actors

- [G2 Reviews & Products Scraper](https://apify.com/automation-lab/g2-scraper) — collect B2B product and review intelligence.
- [Clutch Reviews Scraper](https://apify.com/automation-lab/clutch-reviews-scraper) — monitor public B2B service-provider reviews.
- [TrustRadius Reviews Scraper](https://apify.com/automation-lab/trustradius-reviews-scraper) — enrich B2B software reputation research.

Use FeaturedCustomers Customer References Scraper when customer proof, named customer stories, testimonials, and public case-study documents are the primary entities you need.

### FAQ

#### Can I submit several vendors?

Yes. Add multiple URLs to `vendorUrls`. The maximum reference count remains global across the run.

#### Are duplicate URLs charged twice?

No. Vendor slugs are deduplicated before requests, and records are deduplicated by reference type plus reference ID before charging and saving.

#### Can I extract only testimonials?

Yes. Set `referenceTypes` to `["testimonial"]`.

#### Can I use a case-studies URL while requesting testimonials?

Yes. URLs identify the vendor; `referenceTypes` controls the requested output. This keeps all input URL forms consistent.

#### Does `maxItems` guarantee that many rows?

No. It is an upper bound. A vendor may expose fewer public references than the requested limit.

#### Does the Actor scrape locked cards?

No. Locked and blurred placeholders are intentionally excluded.

#### How should I detect new records?

Use the pair `referenceType` and `referenceId` as the stable run-to-run key, then compare snapshots.

# Actor input Schema

## `vendorUrls` (type: `array`):

FeaturedCustomers vendor profile, case-studies, or testimonials URLs. Each URL is normalized to its vendor so the selected reference types are applied consistently.

## `referenceTypes` (type: `array`):

Extract public case studies, testimonials, or both.

## `maxItems` (type: `integer`):

Maximum total references saved across all vendors and selected types.

## `proxyConfiguration` (type: `object`):

Optional Apify or custom proxy settings. Direct requests work for the public pages in normal conditions.

## Actor input object example

```json
{
  "vendorUrls": [
    {
      "url": "https://www.featuredcustomers.com/vendor/slack"
    }
  ],
  "referenceTypes": [
    "caseStudy",
    "testimonial"
  ],
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Structured public customer-reference records from the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "vendorUrls": [
        {
            "url": "https://www.featuredcustomers.com/vendor/slack"
        }
    ],
    "referenceTypes": [
        "caseStudy",
        "testimonial"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/featuredcustomers-customer-references-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "vendorUrls": [{ "url": "https://www.featuredcustomers.com/vendor/slack" }],
    "referenceTypes": [
        "caseStudy",
        "testimonial",
    ],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/featuredcustomers-customer-references-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "vendorUrls": [
    {
      "url": "https://www.featuredcustomers.com/vendor/slack"
    }
  ],
  "referenceTypes": [
    "caseStudy",
    "testimonial"
  ],
  "maxItems": 20
}' |
apify call automation-lab/featuredcustomers-customer-references-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/featuredcustomers-customer-references-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/i4GwVoKZslqxv6ecM/builds/5BGNEaTfLe0WIQKF4/openapi.json
