# Stock Photos & Videos Scraper for Pexels (`tenfoldfleet/stock-photos-scraper`) Actor

Find free stock photos and stock videos on Pexels by keyword and get title, tags, size, author, license, page link and direct image or MP4 download links in every resolution. onlyNew mode skips media you already have. $1 per 1,000 items; errors and empty searches are free.

- **URL**: https://apify.com/tenfoldfleet/stock-photos-scraper.md
- **Developed by:** [Tenfold Fleet](https://apify.com/tenfoldfleet) (community)
- **Categories:** Videos, Agents, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 media items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

Not affiliated with Pexels. This Actor reads public Pexels search pages and does not use the Pexels API or any account.

### What does Stock Photos & Videos Scraper do?

**Stock Photos & Videos Scraper** searches **Pexels** by keyword and returns each **stock photo** and **stock video** it finds as a clean row: title, description, tags, width and height, author, license, the media page and direct download links (every MP4 resolution for videos). Use it as a **Pexels search API** without requesting a key or tracking hourly quotas.

Turn on **onlyNew** and the Actor remembers which media it already gave you, so each scheduled run returns only media you don't have yet. Pexels orders search results by relevance, not upload date, so a new run picks up where the last one stopped and also checks the first page for newly ranked media.

Only Pexels is supported for now. Pixabay was tested for this Actor but blocked most automated requests, so it is not included.

### Why use it?

- **Content teams and agencies**: shortlist royalty-free images or B-roll for a campaign in minutes.
- **AI and ML projects**: collect captioned, tagged images and video clips with sizes and license data for datasets or retrieval.
- **App and CMS builders**: feed a media picker, mood board or blog image suggester with search results.
- **Growing a media library**: schedule a search with onlyNew and add a fresh batch of unseen photos or clips on a topic every week.
- **AI agents**: one call answers "find free stock videos of a mountain lake" with direct MP4 links.

### What data can it extract?

| Field | Description |
|---|---|
| `mediaType`, `id` | photo or video, and its Pexels id |
| `title`, `description` | the title and alt text written for the media |
| `tags` | keywords attached to the media |
| `width`, `height` | original size in pixels |
| `durationSecs`, `fps` | length and frame rate of videos |
| `videoFiles` | every MP4 rendition with width, height, fps and URL |
| `authorName`, `authorUsername`, `authorUrl`, `authorLocation` | the photographer or videographer |
| `license`, `licenseUrl` | license name and terms page |
| `pageUrl`, `previewUrl`, `thumbnailUrl`, `downloadUrl` | links to the page, previews and the full file |
| `colors`, `createdAt` | main colors and upload date |
| `query`, `page`, `position`, `totalResults`, `scrapedAt` | where the row came from |

### How to search stock photos and videos

1. Open the Actor in Apify Console and click **Try for free**.
2. Type one or more **search terms**, for example `mountain lake`.
3. Pick the **media type**: photos, videos or both.
4. Set **Max items per search** and click **Start**.
5. Download the results as JSON, CSV or Excel, or read them through the Apify API.

### How much does it cost to scrape stock photos?

You pay **$1 per 1,000 media items** (pay per event), plus a tiny $0.00005 start fee per run. Proxy and compute are included. Searches with no results, pages the site blocks, parse errors, duplicates and media skipped by onlyNew are **free**. A search for 100 photos costs about $0.10.

On the Apify free plan ($5 of monthly credit) you can collect a few thousand items a month; keep single runs to a few hundred items while testing.

### Input

```json
{
    "queries": ["mountain lake", "coffee shop"],
    "mediaType": "both",
    "maxItemsPerQuery": 50,
    "onlyNew": false
}
```

`maxItemsPerQuery` applies per search term and per media type, so the example above can return up to 2 x 2 x 50 = 200 items.

### Output

```json
{
    "source": "pexels",
    "mediaType": "video",
    "id": "36882323",
    "query": "mountain",
    "title": "Scenic Hike in Wasatch Mountains, Utah",
    "tags": ["Adventure", "Backpacking", "Clouds", "Hiking"],
    "width": 2160,
    "height": 3840,
    "durationSecs": 16,
    "fps": 59.94,
    "pageUrl": "https://www.pexels.com/video/scenic-hike-in-wasatch-mountains-utah-36882323/",
    "authorName": "Alex Moliski",
    "license": "Pexels",
    "downloadUrl": "https://videos.pexels.com/video-files/36882323/15623735_2160_3840_60fps.mp4",
    "videoFiles": [{ "width": 2160, "height": 3840, "fps": 59.94, "url": "https://videos.pexels.com/video-files/..." }]
}
```

Download the dataset as JSON, CSV, Excel, XML or HTML from the run page, or connect it to Make, Zapier, Google Sheets or your own code.

### Tips

- Pexels pages through about 8,000 results for one search (334 pages of 24); split very broad topics into narrower terms for more.
- Pexels also returns loose matches for rare or misspelled words, so check `title` and `tags` for odd terms.
- Run the Actor on a schedule with **onlyNew** on to get only media you haven't received before. Give each schedule its own memory name.
- The same photo found by two of your search terms is returned and charged once.

### FAQ

#### Do I need a Pexels API key?

No. The Actor reads the public search pages, so there are no keys or per-hour quotas to manage.

#### Can I use the photos commercially?

Pexels publishes its own free license (`licenseUrl` in every row). Read it before use: it allows most commercial use but has limits, for example on selling unmodified copies or showing identifiable people or brands in a misleading way.

#### Why did a search return an item with an `error` field?

The search had no results, the site blocked the page after several retries, or the page could not be read. These rows are free and tell you which search to retry.

#### Can I get only media I haven't seen?

Yes. Turn on **Only new media**. Ids already returned, and how deep each search got, are stored in a key-value store in your account under the memory name you choose. Results follow Pexels relevance order, so this gives you media you haven't received yet, not a strict newest-first feed.

#### Is Pixabay supported?

Not at the moment. It blocked most requests in our tests, and we would rather not charge for unreliable results.

### Disclaimer

This Actor collects publicly available data only. You are responsible for following the Pexels license and terms, and for crediting authors where you choose or are required to. See other tools by this developer on [Apify Store](https://apify.com/tenfoldfleet).

### More tools from Tenfold Fleet

| Actor | Output |
|---|---|
| [ALDI Australia Scraper - AU Products, Unit Prices & Catalogue](https://apify.com/tenfoldfleet/aldi-australia-scraper) | product |
| [Alibaba Image Search - Reverse Lookup of Suppliers by Photo](https://apify.com/tenfoldfleet/alibaba-image-search) | matched product |
| [Alibaba Products Scraper: Wholesale Suppliers, MOQ, Price Tiers](https://apify.com/tenfoldfleet/alibaba-products-scraper) | product |
| [AliExpress Reviews Scraper: Product Feedback & Photos Monitor](https://apify.com/tenfoldfleet/aliexpress-reviews-scraper) | review |
| [AliExpress Keyword Scraper - Exact Sold Counts by Search Term](https://apify.com/tenfoldfleet/aliexpress-search-scraper) | product |
| [Amazon Product Scraper - Details, Prices & Search by ASIN](https://apify.com/tenfoldfleet/amazon-product-scraper) | product |
| [Applicant Tracking Jobs Scraper - Greenhouse, Lever & 6 More](https://apify.com/tenfoldfleet/ats-jobs-scraper) | job posting |
| [Backlinks Checker - Referring Domains, Anchors & Domain Rank](https://apify.com/tenfoldfleet/backlinks-checker) | backlink |
| [BBB Scraper: Business Leads, Ratings & New Reviews](https://apify.com/tenfoldfleet/bbb-scraper-leads-reviews) | business |
| [Bilibili Scraper - Videos, Comments, Danmaku & Search](https://apify.com/tenfoldfleet/bilibili-scraper) | video or comment |
| [Businesses Without Websites - Local Leads with Phone & Rating](https://apify.com/tenfoldfleet/businesses-without-websites) | lead |
| [Coles Product Scraper - Australian Supermarket Prices & Deals](https://apify.com/tenfoldfleet/coles-product-scraper) | product |
| [Contact Details Scraper - One Lead Record per Company Website](https://apify.com/tenfoldfleet/company-contact-finder) | website with contacts |
| [Facebook Ads Library Scraper for Marketers](https://apify.com/tenfoldfleet/facebook-ads-library-scraper) | ad |
| [Facebook Page Contact Finder - Business Leads from Page Links](https://apify.com/tenfoldfleet/facebook-page-contact-finder) | page with contact details |
| [Facebook Reels Scraper: Views & Captions Monitor for Any Page](https://apify.com/tenfoldfleet/facebook-reels-scraper) | reel |
| [Foundit Jobs Monitor: India, Singapore & Malaysia Jobs Scraper](https://apify.com/tenfoldfleet/foundit-jobs-monitor) | job listing |
| [Funding Rounds Scraper - Recently Funded Companies & Investors](https://apify.com/tenfoldfleet/funding-rounds-scraper) | funding round |
| [Google Ads Transparency Center Scraper - Competitor Ads by Site](https://apify.com/tenfoldfleet/google-ads-transparency-scraper) | ad |
| [Google AI Overviews Checker - Citations & Domain Tracker](https://apify.com/tenfoldfleet/google-ai-overviews-checker) | keyword checked |
| [Google Flights Scraper - All Fares per Route & Date (API)](https://apify.com/tenfoldfleet/google-flights-scraper) | route search |
| [Google Hotels Scraper - Nightly Prices, Stars & Booking Sites](https://apify.com/tenfoldfleet/google-hotels-scraper) | hotel |
| [Google for Jobs Scraper - Openings by City, Pay & Job Board](https://apify.com/tenfoldfleet/google-jobs-scraper) | job listing |
| [Google Keyword Planner API Alternative - Ideas, Bids & Volume](https://apify.com/tenfoldfleet/google-keyword-planner) | keyword idea |
| [Google Maps Extractor - Business Leads, Phones & Websites](https://apify.com/tenfoldfleet/google-maps-extractor) | place |
| [Google News Scraper - Articles, Real URLs & Full Text](https://apify.com/tenfoldfleet/google-news-scraper) | article |
| [Google Travel Hotel Rate Tracker - OTA Prices for Every Night](https://apify.com/tenfoldfleet/google-travel-hotel-rate-tracker) | offer |
| [Search Trends by Region & Time - Google Trends Data Scraper](https://apify.com/tenfoldfleet/google-trends-scraper) | keyword |
| [Instagram Reels Search - Keyword to Top Reels, Plays & Creators](https://apify.com/tenfoldfleet/instagram-reels-search) | reel |
| [Instagram Reels Transcript - Speech to Text for Public Reels](https://apify.com/tenfoldfleet/instagram-reels-transcript) | reel transcript |
| [Keyword Ideas & Related Keywords - Difficulty, Volume & CPC](https://apify.com/tenfoldfleet/keyword-ideas) | keyword idea |
| [Keyword Search Volume, CPC & Difficulty Checker (Bulk)](https://apify.com/tenfoldfleet/keyword-search-volume) | keyword with data |
| [Likee Scraper - Creators by Country, Video Views & Likes](https://apify.com/tenfoldfleet/likee-scraper) | video |
| [LinkedIn Ads Library Scraper - Competitor Ad Copy & Targeting](https://apify.com/tenfoldfleet/linkedin-ad-library-scraper) | ad |
| [LinkedIn Company Posts Monitor: New Posts, No Login](https://apify.com/tenfoldfleet/linkedin-company-posts-monitor) | post |
| [LinkedIn Company Scraper: Firmographics & Recent Posts](https://apify.com/tenfoldfleet/linkedin-company-scraper) | company |
| [Pinterest Search Scraper: Pins, Promoted Ads & Shop Trends](https://apify.com/tenfoldfleet/pinterest-search-scraper) | pin |
| [Reddit Brand Monitoring - Keyword Alerts for Posts & Comments](https://apify.com/tenfoldfleet/reddit-brand-monitoring) | mention |
| [Reddit Post Comments Export: Threads to JSON & CSV](https://apify.com/tenfoldfleet/reddit-post-comments-export) | comment |
| [Remote Job Board Scraper - Remote Jobs Aggregator, 7 Sites](https://apify.com/tenfoldfleet/remote-jobs-aggregator) | unique remote job |
| [SEEK Jobs Scraper - Salaries & Hiring Across 8 APAC Job Boards](https://apify.com/tenfoldfleet/seek-job-scraper) | job listing |
| [SEO Agent - AI Keyword Research & Competitor Reports](https://apify.com/tenfoldfleet/seo-agent) | research report |
| [SEO Crawler - Technical SEO Audit Tool & On-Page Checker](https://apify.com/tenfoldfleet/seo-audit-tool) | page audit |
| [SEO Competitor Keywords - Domain Ranked Keywords & Keyword Gap](https://apify.com/tenfoldfleet/seo-competitor-keywords) | keyword |
| [Shopify Inventory Scraper - SKUs, Variants & In-Stock Status](https://apify.com/tenfoldfleet/shopify-products-scraper) | product |
| [Shopify App & Theme Detector - Store Analyzer & Contacts](https://apify.com/tenfoldfleet/shopify-store-analyzer) | shopify store |
| [Sitemap URL Extractor - All URLs from sitemap.xml & robots.txt](https://apify.com/tenfoldfleet/sitemap-url-extractor) | url |
| [Website Built With Checker - Find Any Site's CMS & Tech Stack](https://apify.com/tenfoldfleet/tech-stack-detector) | website |
| [Threads Search - Keyword & Profile Posts Scraper (No Login)](https://apify.com/tenfoldfleet/threads-search) | post |
| [TikTok Ads Library Scraper: Competitor Ads in Europe](https://apify.com/tenfoldfleet/tiktok-ads-library-scraper) | ad |
| [TikTok Transcripts - Captions or Speech to Text for Any Video](https://apify.com/tenfoldfleet/tiktok-transcripts) | video transcript |
| [HTML to Text & URL to Markdown - LLM Ready Web Content](https://apify.com/tenfoldfleet/url-to-markdown) | page |
| [Website Traffic Checker - Bulk Domain Traffic Estimate](https://apify.com/tenfoldfleet/website-traffic-checker) | domain with traffic data |
| [WeChat Official Account Articles - Keyword Search to Markdown](https://apify.com/tenfoldfleet/wechat-official-account-articles) | article found |
| [Weibo Scraper - Comment Threads, Hot Search Ranks & User Stats](https://apify.com/tenfoldfleet/weibo-scraper) | comment |
| [Woolworths Product Scraper - AU Shelf Prices, Specials & GTINs](https://apify.com/tenfoldfleet/woolworths-product-scraper) | product |
| [Workday Jobs Scraper - myworkdayjobs.com API with Salary](https://apify.com/tenfoldfleet/workday-jobs-scraper) | job posting |
| [YouTube Channel Email Scraper - Creator Contact Extractor](https://apify.com/tenfoldfleet/youtube-channel-email-scraper) | channel with email |
| [YouTube Livestream & Channel Scraper - Videos, Likes & Stats](https://apify.com/tenfoldfleet/youtube-channel-scraper) | video |
| [YouTube Comments Scraper - Replies, Likes & Sort by Newest](https://apify.com/tenfoldfleet/youtube-comments-scraper) | comment |
| [YouTube Search Scraper: Keyword Video & Shorts Monitor](https://apify.com/tenfoldfleet/youtube-search-scraper) | search result |
| [YouTube Shorts Analytics Scraper - Views, Likes & Hashtags](https://apify.com/tenfoldfleet/youtube-shorts-scraper) | short |
| [YouTube Captions Downloader - Transcript & Subtitles Scraper](https://apify.com/tenfoldfleet/youtube-transcript-scraper) | transcript |

# Actor input Schema

## `queries` (type: `array`):

Keywords to search, one per line (e.g. "mountain lake", "coffee shop"). Each term is searched on Pexels.

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

Photos, videos, or both. With both, each search term is searched twice (once per media type).

## `maxItemsPerQuery` (type: `integer`):

Upper limit per search term and per media type (Pexels pages through about 8,000 results for one search). On the Apify free plan, keep runs to a few hundred items so they fit the monthly credit.

## `onlyNew` (type: `boolean`):

Skip media returned by earlier runs that used the same memory name below. Use it on a schedule to get only media you have not received yet (Pexels sorts by relevance, so this is not a newest-first feed). Skipped media are not charged.

## `seenStoreName` (type: `string`):

Name of the key-value store in your account that remembers media ids already returned. Use different names for unrelated schedules.

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

How many searches run at the same time.

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

Pexels blocks many datacenter IPs, so Apify residential proxy is the default. Proxy cost is included in the price.

## Actor input object example

```json
{
  "queries": [
    "mountain lake",
    "coffee shop"
  ],
  "mediaType": "photos",
  "maxItemsPerQuery": 20,
  "onlyNew": false,
  "seenStoreName": "stock-media-seen",
  "maxConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "queries": [
        "mountain lake",
        "coffee shop"
    ],
    "maxItemsPerQuery": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tenfoldfleet/stock-photos-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 = {
    "queries": [
        "mountain lake",
        "coffee shop",
    ],
    "maxItemsPerQuery": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("tenfoldfleet/stock-photos-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 '{
  "queries": [
    "mountain lake",
    "coffee shop"
  ],
  "maxItemsPerQuery": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call tenfoldfleet/stock-photos-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tenfoldfleet/stock-photos-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/MsgWLtPzUcSUmQsyw/builds/Hw3ICVvWTthrQ6AEe/openapi.json
