# DogTime Dog Breed Profile Scraper (`maximedupre/dogtime`) Actor

Collect DogTime breed profiles in a structured dataset. Choose a full directory crawl, a profile limit, or specific breed names and profile URLs. Get traits, vital stats, text, and source links.

- **URL**: https://apify.com/maximedupre/dogtime.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Education, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.35 / 1,000 breed profiles

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

### 🐾 Build a DogTime breed profile dataset

Pet researchers, app builders, and developers can collect public DogTime breed profiles in a structured dataset. Each saved row can include breed identity, vital stats, available 1 to 5 ratings, written sections, rescue groups, and source links. Use these rows to study breed traits, enrich pet tools, or compare profiles without copying pages by hand.

**Task examples**

- Crawl the public breed list with **[Dog Breed Directory](https://apify.com/maximedupre/dogtime/examples/dog-breed-directory)**.
- Fetch named breeds or profile URLs with **[Dog Breed Profiles](https://apify.com/maximedupre/dogtime/examples/dog-breed-profiles)**.
- Review a wire-haired breed profile with **[Wire Haired Dachshund](https://apify.com/maximedupre/dogtime/examples/wire-haired-dachshund)**.
- Collect German shepherd puppy profile data with **[German Shepherd Puppies](https://apify.com/maximedupre/dogtime/examples/german-shepherd-puppies)**.
- Collect dachshund puppy profile data with **[Dachshund Puppies](https://apify.com/maximedupre/dogtime/examples/dachshund-puppies)**.
- Collect golden retriever puppy profile data with **[Golden Retriever Puppies](https://apify.com/maximedupre/dogtime/examples/golden-retriever-puppies)**.

#### 📦 DogTime breed profile rows

Each row is one successfully retrieved public DogTime breed profile. DogTime may omit some fields on a profile, so a row can keep written sections when ratings are not available.

#### ▶️ Crawl a full directory or selected profiles

Choose **Directory** to crawl the current public breed directory. Choose **Specific profiles** to enter breed names or public DogTime profile URLs. You can set a profile limit to stop after a chosen number or resume a Directory crawl with a saved progress marker. Leave **Maximum profiles** empty to return all available results until the source is exhausted.

#### ⚙️ Input

Choose a directory crawl or enter specific breed targets.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `target` | choice | Choose `directory` to crawl the breed directory or `specificProfiles` to fetch the names or public DogTime profile URLs you enter. |
| `directoryScope` | choice | For Directory, choose `complete` for the current directory or `limited` for a limited crawl. This field is ignored for Specific profiles. |
| `maxProfiles` | integer, optional | Sets a positive limit for Directory runs. Leave it empty to return all available results until the source is exhausted. This field is ignored for Specific profiles. |
| `resumeFrom` | string, optional | Continues a Directory run from a progress marker saved by an earlier run. This field is ignored for Specific profiles. |
| `profiles` | array of strings | For Specific profiles, enter one or more breed names or public DogTime profile URLs, with one value per line. This field is ignored for Directory. |

**Example input**

This genuine input comes from a successful current-beta default run.

```json
{
  "target": "directory",
  "directoryScope": "limited",
  "maxProfiles": 10
}
```

#### 🧾 Output

The run output contains a link to the dataset with the saved breed profile rows. Optional fields are present when DogTime provides them.

**Run output**

| Field | Type | What it does |
| --- | --- | --- |
| `dataset` | string | Links to the dataset with the saved breed profile rows. |

**Dataset row**

| Field | Type | What it does |
| --- | --- | --- |
| `name` | string, required | Breed name shown on the DogTime profile. |
| `slug` | string, required | DogTime profile slug used to identify the breed page. |
| `breedGroup` | string, optional | Breed group listed on the profile. |
| `height` | string, optional | Height range listed on the profile. |
| `weight` | string, optional | Weight range listed on the profile. |
| `lifeSpan` | string, optional | Life span listed on the profile. |
| `size` | string, optional | Size information listed on the profile. |
| `ratings` | array, optional | Available DogTime ratings for the breed. Each score is from 1 to 5. |
| `ratings[].category` | string | Rating category. |
| `ratings[].dimension` | string | Rating dimension. |
| `ratings[].score` | integer, 1 to 5 | Score for the rating dimension. |
| `narrative` | object, optional | Available written sections from the profile. |
| `narrative.longDescription` | string, optional | Longer breed description. |
| `narrative.personality` | string, optional | Personality section. |
| `narrative.history` | string, optional | History section. |
| `narrative.care` | string, optional | Care section. |
| `narrative.feeding` | string, optional | Feeding section. |
| `narrative.coatAndGrooming` | string, optional | Coat and grooming section. |
| `narrative.childrenAndOtherPets` | string, optional | Children and other pets section. |
| `highlights` | array of strings, optional | Breed highlights listed on the profile. |
| `healthConcerns` | array of strings, optional | Health concerns listed on the profile. |
| `rescueGroups` | array, optional | Recommended rescue groups listed on the profile. |
| `rescueGroups[].name` | string | Rescue group name. |
| `rescueGroups[].url` | string, URL, optional | Source URL for the rescue group when provided. |
| `sourceUrl` | string, URL, required | Public DogTime profile URL for the breed. |
| `heroImageUrl` | string, URL, optional | Source URL for the profile's hero image. |
| `retrievedAt` | date-time string, required | Time when the profile was retrieved. |

**Example dataset row**

This is a shortened genuine row from a current-beta run. The `"..."` strings mark omitted narrative text, remaining ratings, and omitted list values.

```json
{
  "name": "Staffordshire Bull Terrier",
  "slug": "staffordshire-bull-terrier",
  "sourceUrl": "https://dogtime.com/dog-breeds/staffordshire-bull-terrier",
  "retrievedAt": "2026-08-12T21:31:56.862Z",
  "breedGroup": "Terrier",
  "height": "14 to 16 inches tall at the shoulder",
  "weight": "24 to 38 pounds",
  "lifeSpan": "12 to 14 years",
  "size": "Medium",
  "ratings": [
    {
      "category": "Adaptability",
      "dimension": "Adapts Well To Apartment Living",
      "score": 3
    },
    {
      "category": "Adaptability",
      "dimension": "Good For Novice Dog Owners",
      "score": 1
    },
    {
      "category": "Adaptability",
      "dimension": "Sensitivity Level",
      "score": 4
    },
    "..."
  ],
  "narrative": {
    "longDescription": "...",
    "personality": "...",
    "history": "...",
    "care": "...",
    "feeding": "...",
    "coatAndGrooming": "...",
    "childrenAndOtherPets": "..."
  },
  "highlights": [
    "Loving and Affectionate: They are renowned for their affectionate and loving nature, often forming strong bonds with their human family members.",
    "..."
  ],
  "healthConcerns": [
    "Canine Hip Dysplasia (CHD): This is a heritable condition in which the thighbone doesn't fit snugly into the hip joint, eventually causing lameness or arthritis. X-ray screening for hip dysplasia is done by the Orthopedic Foundation for Animals or the University of Pennsylvania Hip Improvement Program (PennHIP). Dogs with hip dysplasia should not be bred.",
    "..."
  ],
  "rescueGroups": [
    {
      "name": "Pit Bull Rescue Central",
      "url": "http://www.pbrc.net/"
    },
    {
      "name": "PitBulls for Life",
      "url": "http://www.pitbullsforlife.com/"
    },
    {
      "name": "Project Pit Bull",
      "url": "http://www.projectpitbull.org/"
    }
  ],
  "heroImageUrl": "https://dogtime.com/wp-content/uploads/sites/12/2023/09/GettyImages-1418252093-e1695215819445.jpg"
}
```

#### 💳 Pricing

Pay per event. The **Breed profile** event charges for each successfully retrieved breed profile saved to your dataset. The price for each event follows the tier shown on the Actor page.

#### 🔌 Integrations

Open the dataset from the run output and use Apify's dataset tools to read or export the rows.

Watch the setup walkthrough:

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Can I crawl all available DogTime profiles?

Yes. Choose Directory and leave **Maximum profiles** empty. The run returns all available results until the source is exhausted.

##### Can I fetch only named breeds or profile URLs?

Yes. Choose Specific profiles and enter one or more breed names or public DogTime profile URLs, one per line.

##### What source does the Actor use?

It reads public DogTime breed profile pages. It does not collect private DogTime content or pages from other sources.

##### What happens when a profile has no ratings?

Available narrative and other fields can still be returned. Missing ratings are left out rather than made up.

##### How do I resume a directory crawl?

Save the progress marker from an earlier Directory run and enter it in **Resume from**. This field is ignored for Specific profiles.

##### Does the Actor download breed images?

No. It returns `heroImageUrl` source links. It does not download or mirror image files.

##### Is this veterinary advice or a breed recommendation?

No. The output is source data, not a personalized match, diagnosis, or treatment plan.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~dogtime/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Cobasi Pet Product Catalog Scraper (Brazil)](https://apify.com/maximedupre/cobasi): Compare public pet products, prices, stock, and variants with breed profile data.
- [DogTime Dog Breed Profile Scraper](https://apify.com/jungle_synthesizer/dogtime-com-dog-breed-profile-scraper): Collect another public DogTime breed profile dataset for the same source.
- [AKC Dog Breed Directory Scraper](https://apify.com/jungle_synthesizer/akc-dog-breed-directory-scraper): Compare AKC breed profiles, trait scorecards, and physical stats.
- [Adopt-a-Pet Scraper](https://apify.com/lulzasaur/adoptapet-scraper): Find adoption listings by breed and location with shelter details.
- [Petfinder Scraper](https://apify.com/crawlergang/petfinder-scraper): Search adoptable pets by breed, age, size, and location.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `target` (type: `string`):

Choose whether to crawl the directory or specific DogTime profiles.

## `directoryScope` (type: `string`):

For Directory, choose the complete current breed directory or a limited crawl. This field is ignored for Specific profiles.

## `maxProfiles` (type: `integer`):

Optional stop for Directory runs. Enter a positive number to stop after that many profiles. Leave it empty to return all available results until the source is exhausted. This field is ignored for Specific profiles.

## `resumeFrom` (type: `string`):

Optional progress marker from an earlier Directory run. Enter the value saved by that run to continue from the saved point. This field is ignored for Specific profiles.

## `profiles` (type: `array`):

For Specific profiles, enter one or more breed names or DogTime profile URLs. Use one value per line. This field is ignored for Directory.

## Actor input object example

```json
{
  "target": "directory",
  "directoryScope": "limited",
  "maxProfiles": 10
}
```

# Actor output Schema

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

A dataset with one row for each successfully retrieved DogTime breed profile.

# 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 = {
    "target": "directory",
    "directoryScope": "limited",
    "maxProfiles": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/dogtime").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 = {
    "target": "directory",
    "directoryScope": "limited",
    "maxProfiles": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/dogtime").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 '{
  "target": "directory",
  "directoryScope": "limited",
  "maxProfiles": 10
}' |
apify call maximedupre/dogtime --silent --output-dataset

```

## MCP server setup

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

```

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/hLMg7VqkePUy9apgD/builds/vNF4KkzbnReHRSKUv/openapi.json
