# Pexels Scraper — Photos, Videos & Engagement Data (`blackfalcondata/pexels-scraper`) Actor

This Pexels scraper extracts photos and videos by search, curated feed, photo ID, user, collection, or similar-to — with views, downloads, likes, and EXIF data the official API can't return.

- **URL**: https://apify.com/blackfalcondata/pexels-scraper.md
- **Developed by:** [Black Falcon Data](https://apify.com/blackfalcondata) (community)
- **Categories:** Other, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

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

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

### What does Pexels Scraper do?

Pexels Scraper extracts structured photo and video data from pexels.com — including views, downloads, likes, tags, colors, dimensions and camera EXIF, engagement signals the official Pexels API cannot return.

**New to Apify?** [Sign up free](https://console.apify.com/sign-up?fpr=1h3gvi&fp_sid=ctaplain) and use the included $5 monthly platform credit to test this actor.

### Key features

<!-- KEY_FEATURES:START -->
- **📊 Views, downloads and likes on your results** — toggle `includeStats` to attach `views`, `downloads`, and `likes` to photos and videos — engagement signals the official Pexels API cannot return at all, so you can rank and filter by what people actually view and download.
- **📷 Camera EXIF, labeled honestly** — the same toggle attaches `camera`, `aperture`, `focalLength`, and `iso` — present on **~57% of photos** (whichever the photographer originally embedded) and **never on video**.
- **🎛️ Six ways to pull media, one actor** — `search`, `curated` (homepage feed), a specific photo/video ID, a photographer's uploads, a collection, or "more like this" — covering both photos and videos in every mode.
- **🧰 Filters verified to actually work** — orientation, minimum width/height, video duration, and people count/age are hard filters confirmed to narrow results. Colour biases results toward the hex hue you supply — it is not an exact-match filter.
- **🔗 Paste a search URL** — paste a full pexels.com search URL straight from your browser instead of building Search Query + filters by hand — the actor parses it directly.
<!-- KEY_FEATURES:END -->

### What data can you extract from pexels.com?

Each result includes Core media item fields (`mediaType`, `id`, `slug`, `title`, `alt`, `width`, `height`, and `aspectRatio`, and more) and extended fields (`description`). In standard mode, all fields are always present — unavailable data points are returned as `null`, never omitted. In compact mode, only core fields are returned.

### Input

Configure the actor through the input schema in Apify Console.

Key parameters:

- **`mode`** — Which Pexels source to scrape. (default: `"search"`)
- **`searchQuery`** — Keyword(s) to search for. Required in search mode unless Search URL is set.
- **`searchUrl`** — A full pexels.com search URL to scrape directly, instead of building one from Search Query + filters.
- **`mediaType`** — Search photos or videos. (default: `"photos"`)
- **`orientation`** — Restrict results to this orientation.
- **`color`** — Hex colour, e.g. #ff0000. Biases results toward that hue (not an exact match). Named colours are not supported.
- **`peopleCount`** — Filter by the number of people shown in the media.
- **`peopleAge`** — Filter by the age group of people shown in the media.
- **`minWidth`** — Minimum width in pixels.
- **`minHeight`** — Minimum height in pixels.
- **`minDuration`** — Minimum video duration in seconds. Only applies when Media Type is videos.
- **`maxDuration`** — Maximum video duration in seconds. Only applies when Media Type is videos.
- ...and 12 more parameters

### Input examples

**Basic search** — Keyword-driven search with a result cap.

→ Full payload per result — all standard fields populated where the source provides them.

```json
{
  "mode": "search",
  "searchQuery": "mountains",
  "maxItems": 50
}
````

**Filtered search** — Narrow results with advanced filters — only matching media items are returned.

→ Same field set as basic search; fewer, more relevant rows.

```json
{
  "searchQuery": "mountains",
  "orientation": "landscape",
  "mediaType": "photos",
  "maxItems": 100
}
```

**Incremental tracking** — Only emit media items that changed since the previous run with this `stateKey`.

→ First run builds the baseline state. Subsequent runs emit only records that are new or whose tracked content changed. Set `emitUnchanged: true` to include unchanged records as well.

```json
{
  "searchQuery": "mountains",
  "maxItems": 200,
  "incrementalMode": true,
  "stateKey": "mountains-tracker"
}
```

**Compact filtered output** — Combine filters with compact mode for a lightweight AI-agent or MCP data source.

→ Core fields only — ideal for piping into LLMs or downstream tools without token overhead.

```json
{
  "searchQuery": "mountains",
  "orientation": "landscape",
  "maxItems": 50,
  "compact": true
}
```

### Output

Each run produces a dataset of structured media item records. Results can be downloaded as JSON, CSV, or Excel from the Dataset tab in Apify Console.

### Example media item record

```json
{
  "mediaType": "photo",
  "id": 144608,
  "slug": "white-medium-coat-medium-dog",
  "title": "White Medium Coat Medium Dog",
  "description": "Close-up black and white portrait of a playful furry dog showing its teeth, capturing emotion and texture.",
  "alt": "Close-up black and white portrait of a playful furry dog showing its teeth, capturing emotion and texture.",
  "width": 2048,
  "height": 1365,
  "aspectRatio": 1.5003663003663004,
  "orientation": "landscape",
  "license": "Pexels",
  "featured": true,
  "createdAt": "2016-08-23T18:44:45.000Z",
  "updatedAt": "2026-07-16T11:28:46.000Z",
  "publishedAt": "2016-08-24T07:45:03.144Z",
  "tags": [
    {
      "name": "Animal Pictures",
      "search_term": "animal"
    },
    {
      "name": "Animal Close Up",
      "search_term": "animal close-up"
    },
    {
      "name": "Animal Photography",
      "search_term": "animal photography"
    },
    {
      "name": "Black And White",
      "search_term": "black and white"
    },
    {
      "name": "Black And White Art",
      "search_term": "black and white art"
    },
    "... 26 more items"
  ],
  "colors": [
    "#232323",
    "#7a7a7a",
    "#bcbcbc"
  ],
  "mainColor": [
    88,
    88,
    88
  ],
  "reactions": {
    "emotional": {
      "reacted": false,
      "count": 0
    },
    "technical": {
      "reacted": false,
      "count": 0
    },
    "stylistic": {
      "reacted": false,
      "count": 0
    }
  },
  "photographerName": "Suvan Chowdhury",
  "photographerUrl": "https://www.pexels.com/@suvan-chowdhury-37305/",
  "photographerLocation": "India",
  "imageUrls": {
    "small": "https://images.pexels.com/photos/144608/pexels-photo-144608.jpeg?auto=compress&cs=tinysrgb&h=130",
    "medium": "https://images.pexels.com/photos/144608/pexels-photo-144608.jpeg?auto=compress&cs=tinysrgb&w=750",
    "large": "https://images.pexels.com/photos/144608/pexels-photo-144608.jpeg?auto=compress&cs=tinysrgb&w=1440",
    "download": "https://www.pexels.com/photo/144608/download/",
    "download_link": "https://images.pexels.com/photos/144608/pexels-photo-144608.jpeg?cs=srgb&dl=pexels-suvan-chowdhury-37305-144608.jpg&fm=jpg"
  },
  "portalUrl": "https://www.pexels.com/photo/white-medium-coat-medium-dog-144608/",
  "scrapedAt": "2026-07-17T18:25:19.146Z"
}
```

### Incremental fields

When incremental mode is on, each record also carries:

- `changeType` — one of `NEW`, `UPDATED`, `UNCHANGED`, `REAPPEARED`, `EXPIRED`. Default output covers `NEW` / `UPDATED` / `REAPPEARED`; set `emitUnchanged: true` to opt into the others.

### How to scrape pexels.com

1. Go to [Pexels Scraper](https://apify.com/blackfalcondata/pexels-scraper?fpr=1h3gvi) in Apify Console.
2. Configure the input.
3. Set `maxItems` to control how many results you need.
4. Click **Start** and wait for the run to finish.
5. Export the dataset as JSON, CSV, or Excel.

### Use cases

- Extract media item data from pexels.com for market research and competitive analysis.
- Monitor new and changed media items on scheduled runs without processing the full dataset every time.
- Feed structured data into AI agents, MCP tools, and automated pipelines using compact mode.
- Export clean, structured data to dashboards, spreadsheets, or data warehouses.

### How much does it cost to scrape pexels.com?

Pexels Scraper uses [pay-per-event](https://docs.apify.com/platform/actors/paid-actors/pay-per-event) pricing. You pay a small fee when the run starts and then for each result that is actually produced.

- **Run start:** $0.0005 per run
- **Per result:** $0.001 per media item record

Example costs:

- 10 results: **$0.011**
- 25 results: **$0.026**
- 100 results: **$0.1**
- 200 results: **$0.2**
- 500 results: **$0.5**

#### Example: recurring monitoring savings

These examples compare full re-scrapes with incremental runs at different churn rates. Churn is the share of media items that are new or whose tracked content changed since the previous run. Actual churn depends on your query breadth, source activity, and polling frequency — the scenarios below are examples, not predictions.

Example setup: 250 results per run, daily polling (30 runs/month). Event-pricing examples scale linearly with result count.

| Churn rate | Full re-scrape run cost | Incremental run cost | Savings vs full re-scrape | Monthly cost after baseline |
|---|---:|---:|---:|---:|
| 5% — stable niche query | $0.25 | $0.01 | $0.24 (95%) | $0.39 |
| 15% — moderate broad query | $0.25 | $0.04 | $0.21 (85%) | $1.14 |
| 30% — high-volume aggregator | $0.25 | $0.08 | $0.17 (70%) | $2.27 |

Full re-scrape monthly cost at daily polling: $7.51. First month with incremental costs $0.63 / $1.35 / $2.44 for the 5% / 15% / 30% scenarios because the first run builds baseline state at full cost before incremental savings apply.

Platform usage (compute and proxies) is billed separately by Apify based on actual consumption. Incremental runs consume less on result processing, though fixed per-run overhead stays the same.

### FAQ

#### How many results can I get from pexels.com?

The number of results depends on the search query and available media items on pexels.com. Use the `maxItems` parameter to control how many results are returned per run.

#### Does Pexels Scraper support recurring monitoring?

Yes. Enable incremental mode to only receive new or changed media items on subsequent runs. This is ideal for scheduled monitoring where you want to track changes over time without re-processing the full dataset.

#### Can I integrate Pexels Scraper with other apps?

Yes. Pexels Scraper works with Apify's [integrations](https://apify.com/integrations?fpr=1h3gvi) to connect with tools like Zapier, Make, Google Sheets, Slack, and more. You can also use webhooks to trigger actions when a run completes.

#### Can I use Pexels Scraper with the Apify API?

Yes. You can start runs, manage inputs, and retrieve results programmatically through the [Apify API](https://docs.apify.com/api/v2). Client libraries are available for JavaScript, Python, and other languages.

#### Can I use Pexels Scraper through an MCP Server?

Yes. Apify provides an [MCP Server](https://apify.com/apify/actors-mcp-server?fpr=1h3gvi) that lets AI assistants and agents call this actor directly. Use compact mode and `excludeEmptyFields` to keep payloads manageable for LLM context windows.

#### Is it legal to scrape pexels.com?

This actor extracts publicly available data from pexels.com. Web scraping of public information is generally considered legal, but you should always review the target site's terms of service and ensure your use case complies with applicable laws and regulations, including GDPR where relevant.

#### Your feedback

If you have questions, need a feature, or found a bug, please [open an issue](https://apify.com/blackfalcondata/pexels-scraper/issues?fpr=1h3gvi) on the actor's page in Apify Console. Your feedback helps us improve.

### You might also like

- [Douyin Hot Search Scraper](https://apify.com/blackfalcondata/douyin-scraper?fpr=1h3gvi) — Scrape douyin.com real-time trending boards — hot search, seeding, entertainment, social.
- [Facebook Group Post Scraper](https://apify.com/blackfalcondata/facebook-group-post-scraper?fpr=1h3gvi) — Scrape facebook.com group posts from group URLs with post text, timestamps, engagement counters,.
- [Maigret Username OSINT — Verified Account Finder](https://apify.com/blackfalcondata/maigret-username-osint-scraper?fpr=1h3gvi) — Find where a username or handle exists across hundreds of social media networks and websites. Every.
- [Quora Scraper — Q\&A, Profiles & Spaces](https://apify.com/blackfalcondata/quora-scraper?fpr=1h3gvi) — \[💰$0.8/1K] Scrape Quora questions, answers, profiles, posts, and spaces by search or URL —.
- [Reddit Email Scraper — Extract Emails from Posts & Comments](https://apify.com/blackfalcondata/reddit-email-scraper?fpr=1h3gvi) — Extract email addresses and contact details from Reddit posts, comments and user profiles. Search.
- [Reddit Lead Scraper — Emails, Socials & Contact Info](https://apify.com/blackfalcondata/reddit-lead-scraper?fpr=1h3gvi) — Turn Reddit into a B2B lead list. Keep only records that expose a contact signal — email, social.
- [Reddit RAG Dataset — LLM Training Data from Posts & Comments](https://apify.com/blackfalcondata/reddit-rag-dataset?fpr=1h3gvi) — Build clean LLM and RAG datasets from Reddit. Export posts with full comment threads as.
- [Reddit Scraper — Posts & Full Comment Threads](https://apify.com/blackfalcondata/reddit-scraper?fpr=1h3gvi) — Scrape Reddit posts with full nested comment threads — or search any subreddit or keyword across.

### Getting started with Apify

New to Apify? [Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=1h3gvi\&fp_sid=ctaplain) — no credit card required.

1. Sign up — $5 platform credit included
2. Open this actor and configure your input
3. Click **Start** — export results as JSON, CSV, or Excel

Need more later? [See Apify pricing](https://apify.com/pricing?fpr=1h3gvi).

### Disclaimer

This actor accesses only publicly available data on pexels.com. You are responsible for how you use the extracted data — in particular any personal information such as names, phone numbers, or email addresses — and for complying with Pexels's terms of use, applicable data-protection law (including the GDPR where it applies), and the anti-spam rules of your jurisdiction.

This actor is not affiliated with, endorsed by, or connected to Pexels.

### Search keywords

pexels scraper, pexels api, apify pexels, pexels data extraction, pexels.com scraper, pexels.com data, pexels.com api.

# Actor input Schema

## `mode` (type: `string`):

Which Pexels source to scrape.

## `searchQuery` (type: `string`):

Keyword(s) to search for. Required in search mode unless Search URL is set.

## `searchUrl` (type: `string`):

A full pexels.com search URL to scrape directly, instead of building one from Search Query + filters.

## `mediaType` (type: `string`):

Search photos or videos.

## `orientation` (type: `string`):

Restrict results to this orientation.

## `color` (type: `string`):

Hex colour, e.g. #ff0000. Biases results toward that hue (not an exact match). Named colours are not supported.

## `peopleCount` (type: `integer`):

Filter by the number of people shown in the media.

## `peopleAge` (type: `string`):

Filter by the age group of people shown in the media.

## `minWidth` (type: `integer`):

Minimum width in pixels.

## `minHeight` (type: `integer`):

Minimum height in pixels.

## `minDuration` (type: `integer`):

Minimum video duration in seconds. Only applies when Media Type is videos.

## `maxDuration` (type: `integer`):

Maximum video duration in seconds. Only applies when Media Type is videos.

## `photoIds` (type: `array`):

Pexels photo/video IDs. Required in byPhotoId and similar modes (similar uses the first ID).

## `username` (type: `string`):

Pexels photographer username. Required in byUser mode.

## `collectionSlug` (type: `string`):

Pexels collection slug (including its numeric ID suffix, as it appears in the collection URL). Required in byCollection mode.

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

Maximum number of items to return.

## `includeStats` (type: `boolean`):

Fetch each item's detail page for views, downloads, likes, and (photos only, ~57% fill rate) EXIF camera data. Adds one extra request per item.

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

A proxy is required for reliable results. The default is preconfigured — leave it as-is unless you supply your own. Proxy usage is billed to your Apify account.

## `excludeEmptyFields` (type: `boolean`):

Drop null, empty-string, and empty-array fields from each record before push.

## `compact` (type: `boolean`):

Return only the core fields (id, media type, dimensions, page URL, download URLs, photographer, dates) instead of the full record. Every result is still returned — only the fields per result are reduced.

## `incrementalMode` (type: `boolean`):

Only return items that are new or changed since your last run with the same State Key. Requires State Key.

## `stateKey` (type: `string`):

Names the saved history used by Incremental Mode. Reuse the same key across runs to keep comparing against the same history; use different keys for different searches.

## `emitUnchanged` (type: `boolean`):

In Incremental Mode, also return items that have not changed since the last run. On by default, so results match a normal run.

## `appConnector` (type: `string`):

Optional. Pick a connected app under Settings → API & Integrations to receive your results. Best-effort across MCP connectors as Apify expands its catalog.

## `mcpIssueTeam` (type: `string`):

Only when the connected app is an issue tracker: the team the summary issue is created under.

## Actor input object example

```json
{
  "mode": "search",
  "searchQuery": "mountains",
  "mediaType": "photos",
  "maxItems": 30,
  "includeStats": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "excludeEmptyFields": false,
  "compact": false,
  "incrementalMode": false,
  "emitUnchanged": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "mode": "search",
    "searchQuery": "mountains",
    "mediaType": "photos",
    "maxItems": 30,
    "includeStats": false,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    },
    "excludeEmptyFields": false,
    "compact": false,
    "incrementalMode": false,
    "emitUnchanged": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("blackfalcondata/pexels-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 = {
    "mode": "search",
    "searchQuery": "mountains",
    "mediaType": "photos",
    "maxItems": 30,
    "includeStats": False,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
    "excludeEmptyFields": False,
    "compact": False,
    "incrementalMode": False,
    "emitUnchanged": True,
}

# Run the Actor and wait for it to finish
run = client.actor("blackfalcondata/pexels-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 '{
  "mode": "search",
  "searchQuery": "mountains",
  "mediaType": "photos",
  "maxItems": 30,
  "includeStats": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "excludeEmptyFields": false,
  "compact": false,
  "incrementalMode": false,
  "emitUnchanged": true
}' |
apify call blackfalcondata/pexels-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pexels Scraper — Photos, Videos & Engagement Data",
        "description": "This Pexels scraper extracts photos and videos by search, curated feed, photo ID, user, collection, or similar-to — with views, downloads, likes, and EXIF data the official API can't return.",
        "version": "0.1",
        "x-build-id": "GthxW3E08QlJiQ4KF"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/blackfalcondata~pexels-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-blackfalcondata-pexels-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/blackfalcondata~pexels-scraper/runs": {
            "post": {
                "operationId": "runs-sync-blackfalcondata-pexels-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/blackfalcondata~pexels-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-blackfalcondata-pexels-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "🎛️ Mode",
                        "enum": [
                            "search",
                            "curated",
                            "byPhotoId",
                            "byUser",
                            "byCollection",
                            "similar"
                        ],
                        "type": "string",
                        "description": "Which Pexels source to scrape.",
                        "default": "search"
                    },
                    "searchQuery": {
                        "title": "🔍 Search Query",
                        "type": "string",
                        "description": "Keyword(s) to search for. Required in search mode unless Search URL is set."
                    },
                    "searchUrl": {
                        "title": "🔗 Search URL",
                        "type": "string",
                        "description": "A full pexels.com search URL to scrape directly, instead of building one from Search Query + filters."
                    },
                    "mediaType": {
                        "title": "🖼️ Media Type",
                        "enum": [
                            "photos",
                            "videos"
                        ],
                        "type": "string",
                        "description": "Search photos or videos.",
                        "default": "photos"
                    },
                    "orientation": {
                        "title": "📐 Orientation",
                        "enum": [
                            "landscape",
                            "portrait",
                            "square"
                        ],
                        "type": "string",
                        "description": "Restrict results to this orientation."
                    },
                    "color": {
                        "title": "🎨 Color",
                        "type": "string",
                        "description": "Hex colour, e.g. #ff0000. Biases results toward that hue (not an exact match). Named colours are not supported."
                    },
                    "peopleCount": {
                        "title": "🧍 People Count",
                        "type": "integer",
                        "description": "Filter by the number of people shown in the media."
                    },
                    "peopleAge": {
                        "title": "🧒 People Age",
                        "type": "string",
                        "description": "Filter by the age group of people shown in the media."
                    },
                    "minWidth": {
                        "title": "↔️ Minimum Width",
                        "type": "integer",
                        "description": "Minimum width in pixels."
                    },
                    "minHeight": {
                        "title": "↕️ Minimum Height",
                        "type": "integer",
                        "description": "Minimum height in pixels."
                    },
                    "minDuration": {
                        "title": "⏱️ Minimum Duration (video)",
                        "type": "integer",
                        "description": "Minimum video duration in seconds. Only applies when Media Type is videos."
                    },
                    "maxDuration": {
                        "title": "⏱️ Maximum Duration (video)",
                        "type": "integer",
                        "description": "Maximum video duration in seconds. Only applies when Media Type is videos."
                    },
                    "photoIds": {
                        "title": "🆔 Photo IDs",
                        "type": "array",
                        "description": "Pexels photo/video IDs. Required in byPhotoId and similar modes (similar uses the first ID).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "username": {
                        "title": "👤 Username",
                        "type": "string",
                        "description": "Pexels photographer username. Required in byUser mode."
                    },
                    "collectionSlug": {
                        "title": "📁 Collection Slug",
                        "type": "string",
                        "description": "Pexels collection slug (including its numeric ID suffix, as it appears in the collection URL). Required in byCollection mode."
                    },
                    "maxItems": {
                        "title": "💯 Max Items",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of items to return.",
                        "default": 30
                    },
                    "includeStats": {
                        "title": "📈 Include Stats & EXIF",
                        "type": "boolean",
                        "description": "Fetch each item's detail page for views, downloads, likes, and (photos only, ~57% fill rate) EXIF camera data. Adds one extra request per item.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "🌐 Proxy Configuration",
                        "type": "object",
                        "description": "A proxy is required for reliable results. The default is preconfigured — leave it as-is unless you supply your own. Proxy usage is billed to your Apify account.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    },
                    "excludeEmptyFields": {
                        "title": "🧹 Exclude Empty Fields",
                        "type": "boolean",
                        "description": "Drop null, empty-string, and empty-array fields from each record before push.",
                        "default": false
                    },
                    "compact": {
                        "title": "📦 Compact Output",
                        "type": "boolean",
                        "description": "Return only the core fields (id, media type, dimensions, page URL, download URLs, photographer, dates) instead of the full record. Every result is still returned — only the fields per result are reduced.",
                        "default": false
                    },
                    "incrementalMode": {
                        "title": "🔁 Incremental Mode",
                        "type": "boolean",
                        "description": "Only return items that are new or changed since your last run with the same State Key. Requires State Key.",
                        "default": false
                    },
                    "stateKey": {
                        "title": "🔑 State Key",
                        "type": "string",
                        "description": "Names the saved history used by Incremental Mode. Reuse the same key across runs to keep comparing against the same history; use different keys for different searches."
                    },
                    "emitUnchanged": {
                        "title": "📤 Include Unchanged Items",
                        "type": "boolean",
                        "description": "In Incremental Mode, also return items that have not changed since the last run. On by default, so results match a normal run.",
                        "default": true
                    },
                    "appConnector": {
                        "title": "Send results to a connected app",
                        "type": "string",
                        "description": "Optional. Pick a connected app under Settings → API & Integrations to receive your results. Best-effort across MCP connectors as Apify expands its catalog."
                    },
                    "mcpIssueTeam": {
                        "title": "Issue tracker team",
                        "type": "string",
                        "description": "Only when the connected app is an issue tracker: the team the summary issue is created under."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
