# Care.com Scraper (`codingfrontend/care-com-scraper`) Actor

Extract public Care.com caregiver search results and profiles, including rates, experience, services, ratings, checks, and reviews; independent and not endorsed by Care.com.

- **URL**: https://apify.com/codingfrontend/care-com-scraper.md
- **Developed by:** [Coding Frontned](https://apify.com/codingfrontend) (community)
- **Categories:** Other
- **Features:** Limited permissions
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Care.com Scraper do?

Extract structured data from publicly accessible Care.com caregiver search pages and public profiles. Search by supported care category and US city/state slug, or submit explicit public profile URLs.

The Actor uses lightweight HTTP requests and parses the structured data Care.com publishes in each page. It does not sign in, solve CAPTCHAs, access contact details, or cross a private-profile boundary.

### What it extracts

Each successful dataset profile row can include:

- `recordType: "profile"`, `found: true`, and `dataAvailable: true`
- Public profile and service identifiers
- Display name, job title, care categories, city, state, and postal code
- Public profile bio, years of experience, image, and availability
- Hourly rate range, currency, and category-specific published rates
- Overall rating, review count, and rating breakdown
- CareCheck completion flag and published check status/date
- Services, care age groups, qualities, credentials, and languages
- Education, public badges, and public reviews
- Canonical profile URL, originating search URL, and scrape timestamp

Unavailable optional values are omitted rather than replaced with empty strings, nulls, or invented placeholders.

### Input

#### Search by category and location

```json
{
    "category": "babysitters",
    "locationSlug": "new-york-ny",
    "maxResults": 10,
    "maxPages": 1,
    "maxReviewsPerProfile": 10
}
```

Supported categories are `babysitters`, `nannies`, `caregivers`, `pet-sitters`, `housekeepers`, and `tutors`. The location uses the public Care.com URL slug, such as `austin-tx`.

#### Extract explicit profiles

```json
{
  "profileUrls": [
    "https://www.care.com/p/example-caregiver/cc"
    ],
    "maxResults": 1,
    "maxReviewsPerProfile": 10
}
```

Only public HTTPS URLs on `care.com` with the `/p/.../...` profile pattern are accepted.

### Output example

```json
{
    "recordId": "example-record-id",
    "recordType": "profile",
    "found": true,
    "dataAvailable": true,
    "displayName": "Example Caregiver",
    "jobTitle": "Nanny",
    "careTypes": ["Child Care", "Pet Care"],
    "city": "New York",
    "state": "NY",
    "yearsExperience": 10,
    "hourlyRateMin": 17,
    "hourlyRateMax": 25,
    "rateCurrency": "USD",
    "rating": 5,
    "reviewCount": 1,
    "careCheckCompleted": true,
    "services": ["Carpooling", "Craft Assistance", "Light Housekeeping"],
    "profileUrl": "https://www.care.com/p/example-caregiver/cc",
    "scrapedAt": "2025-01-15T12:00:00.000Z"
}
```

Values above illustrate the record shape. Actor results always come from the requested live public pages.

If a public page is unavailable or access is blocked, the Actor stops and writes one explicit diagnostic row instead of treating it as a successful profile:

```json
{
    "recordId": "diagnostic-example-id",
    "recordType": "diagnostic",
    "found": false,
    "dataAvailable": false,
    "diagnosticCode": "ACCESS_DENIED",
    "message": "The public page denied access.",
    "sourceUrl": "https://www.care.com/babysitters/example-city-st",
    "scrapedAt": "2025-01-15T12:00:00.000Z"
}
```

Filter on `dataAvailable === true` when counting successful profile records. Diagnostic rows are not included in the Actor's success count.

### Limits and responsible use

- `maxResults` is capped at 100 and `maxPages` at 5.
- Concurrency is capped at 3, with at least 750 ms pacing.
- Requests use bounded retries with backoff and an actor-side deadline below five minutes.
- CAPTCHA, login, paywall, geofence, device, WAF, rate-limit, and access-denial responses stop immediately without retrying.
- Direct public access is the default; Apify Proxy can be enabled in the input.
- Duplicate records are removed by the public profile identifier.
- Unexpectedly large responses and invalid/off-site URLs are rejected.

Care.com can change its markup, URL formats, availability, or access policy without notice. Some fields differ by caregiver category. A CareCheck or background-check status is a platform-published attribute, not a safety guarantee or endorsement.

You are responsible for complying with Care.com's terms, robots directives, privacy rules, employment and anti-discrimination laws, and all applicable regulations. Do not use the output for harassment, surveillance, identity enrichment, automated eligibility decisions, or other harmful purposes. Collect and retain only the data you need.

### Key-value store

The actor does not write custom key-value records. Caregiver profiles and diagnostics are stored in the dataset; the declared key-value store is intentionally empty.

### Dataset access

Results are written to the default Apify dataset. Download them through the Console or dataset API in JSON, CSV, Excel, XML, and other supported formats.

### Support

If a public page stops producing records, include the input (without secrets), run ID, affected public URL, and a short description of the expected field in your issue report.

# Actor input Schema

## `profileUrls` (type: `array`):

Optional public care.com/p/... profile URLs. When supplied, category and location are ignored.

## `category` (type: `string`):

Public caregiver listing category used for search.

## `locationSlug` (type: `string`):

Care.com city/state URL slug, for example new-york-ny or austin-tx.

## `maxResults` (type: `integer`):

Hard cap on unique caregiver profiles saved.

## `maxPages` (type: `integer`):

Hard cap on listing pages inspected while discovering profiles.

## `maxReviewsPerProfile` (type: `integer`):

Maximum public reviews included in each caregiver record.

## `maxConcurrency` (type: `integer`):

Responsible concurrency cap for public profile pages.

## `requestDelayMillis` (type: `integer`):

Minimum pacing delay between Care.com requests.

## `maxRetries` (type: `integer`):

Bounded attempts with exponential backoff for transient failures.

## `maxPageMbytes` (type: `integer`):

Reject unexpectedly large HTML responses.

## `maxRunMillis` (type: `integer`):

Actor-side deadline capped below five minutes.

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

Optional Apify Proxy. Direct public access is used by default.

## Actor input object example

```json
{
  "profileUrls": [],
  "category": "babysitters",
  "locationSlug": "new-york-ny",
  "maxResults": 10,
  "maxPages": 1,
  "maxReviewsPerProfile": 10,
  "maxConcurrency": 1,
  "requestDelayMillis": 1000,
  "maxRetries": 3,
  "maxPageMbytes": 8,
  "maxRunMillis": 240000,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Dataset containing extracted public profiles and diagnostic rows.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("codingfrontend/care-com-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("codingfrontend/care-com-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{}' |
apify call codingfrontend/care-com-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,codingfrontend/care-com-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/7Y5tkRxUzIhlvh0ZD/builds/5WyJcOTd98mlYLoYo/openapi.json
