
Instagram Reel Scraper
scrape.ly/store/echofield/instagram-reel-scraperSocial mediaVideos
1 monthly user

Scrape free stock photos and videos from Pexels without an API key: search with orientation, color, size, people and duration filters, or pull collections, photographer portfolios, similar media and the discover feed. Get download URLs at every size, video files, tags, colors, dimensions and photographer details.
Collect free stock photos and videos from Pexels with direct download URLs at every size, every video rendition, tags, colors, dimensions and photographer details. Search with real Pexels filters, or pull whole collections, photographer portfolios, similar media and the discover feed. No Pexels account, no API key, about $2 per 1,000 results.
nature, coffee) and/or paste Pexels URLs (photo, video, collection, photographer, search page).| Field | What it does |
|---|---|
searchQueries | Keywords to search, one per line. |
startUrls | Pexels photo/video pages or IDs, collections or slugs, @photographer profiles, search pages (their filters are used), or the discover page. |
mediaType | photos, videos or all. |
maxItems | Results per input: each search term, URL, ID and the discover feed gets its own limit (0 = everything Pexels serves). One search term plus includeDiscoverFeed with maxItems: 5 saves up to 10 results. |
orientation, color, peopleCount, peopleAge, datePosted | Search filters. |
minWidth, minHeight, minDuration, maxDuration, resolution, frameRate | Size and video filters. |
similarTo | Photo/video URLs or IDs; returns media Pexels lists as related. |
includeDiscoverFeed | Adds the newest curated media from the discover feed. |
deepSearch | Goes past ~480 results per search by splitting on filters (on by default). |
{
"searchQueries": ["coffee", "mountain lake"],
"startUrls": [
"https://www.pexels.com/collections/aquatic-aesthetic-bw7dkse/",
"https://www.pexels.com/search/videos/city%20night/?orientation=portrait"
],
"mediaType": "photos",
"maxItems": 100,
"orientation": "landscape",
"color": "blue"
}
One row per photo or video. Main fields:
| Field | Description |
|---|---|
type, id, url, slug | Media type, Pexels ID, page URL and slug |
title, description, alt, tags | Text metadata and content tags |
width, height, aspectRatio, orientation | Dimensions |
mainColor, colors | Dominant color and palette (photos) |
imageOriginal, imageLarge, imageMedium, imageSmall | Photo URLs by size |
downloadUrl, highestQualityUrl, downloadPage | Best download link and the Pexels download page |
duration, fps, videoSrc, videoPreview, videoFiles | Video length, frame rate, files with width/height/fps/link |
preview, thumbnails | Preview images |
photographer, photographerUrl, photographerId, photographerLocation, photographerInstagram, photographerTwitter, photographerAvatar, donateUrl | Creator profile |
createdAt, publishedAt, license, reactions, collectionIds | Dates, license and engagement |
mode, query, sourceId | Which input produced the row |
Example (one photo row from a test run, with the photographer details replaced by fictional ones and the tag list shortened):
{
"type": "photo",
"id": 12377231,
"url": "https://www.pexels.com/photo/a-green-trees-in-the-forest-12377231/",
"slug": "a-green-trees-in-the-forest",
"title": "A Green Trees in the Forest",
"description": "Dense greenery in a tranquil forest setting with tall trees and natural light.",
"alt": "Dense greenery in a tranquil forest setting with tall trees and natural light.",
"width": 1965,
"height": 3488,
"aspectRatio": 0.5633600917431193,
"orientation": "portrait",
"license": "Pexels",
"tags": ["forest", "green trees", "nature", "sunlight", "woods"],
"mainColor": "#2a3121",
"colors": ["#000000", "#2f4f4f", "#808080", "#d3d3d3"],
"reactions": 0,
"createdAt": "2022-06-04T08:21:04.000Z",
"publishedAt": "2022-06-04T21:00:33.377Z",
"photographer": "Alex Example",
"photographerSlug": "alex-example-100000001",
"photographerId": 100000001,
"photographerUrl": "https://www.pexels.com/@alex-example-100000001/",
"photographerLocation": "Lisbon",
"photographerInstagram": "alex.example",
"photographerIsHero": true,
"mode": "search",
"query": "nature",
"imageOriginal": "https://images.pexels.com/photos/12377231/pexels-photo-12377231.jpeg",
"imageLarge": "https://images.pexels.com/photos/12377231/pexels-photo-12377231.jpeg?auto=compress&cs=tinysrgb&w=1440",
"imageMedium": "https://images.pexels.com/photos/12377231/pexels-photo-12377231.jpeg?auto=compress&cs=tinysrgb&w=750",
"imageSmall": "https://images.pexels.com/photos/12377231/pexels-photo-12377231.jpeg?auto=compress&cs=tinysrgb&h=130",
"downloadUrl": "https://images.pexels.com/photos/12377231/pexels-photo-12377231.jpeg?cs=srgb&dl=pexels-12377231.jpg&fm=jpg",
"downloadPage": "https://www.pexels.com/photo/12377231/download/",
"duration": null,
"videoFiles": []
}
Video rows also carry duration, fps, videoSrc, videoPreview and a videoFiles list such as {"fileType": "video/mp4", "width": 3840, "height": 2160, "fps": 30, "link": "https://videos.pexels.com/video-files/..."}. The Video files view shows one row per rendition.
You pay $2.00 per 1,000 results ($0.002 per photo or video saved), plus a small amount of platform usage (compute and datacenter proxy traffic), which is usually well under a cent for a typical run. Example: 1,000 results ≈ $2.00 in result fees. Set a maximum charge on the run to cap your spend; the scraper stops cleanly when it is reached.
Is it legal? The scraper reads public pages and media information that Pexels shows to every visitor. Pexels media is free to use under the Pexels License; crediting photographers is appreciated. You are responsible for how you use the data.
Do I need a Pexels account, API key or proxy? No account or key. The default datacenter proxy works well.
How many results can I get? Pexels shows about 480 results per search and filter combination. With deep search on, one term can return thousands of unique results. Photographer portfolios and collections are listed in full.
Can I download the actual files? The rows contain direct CDN links for every size and video rendition; feed them to any downloader.
Why is a field empty? Pexels leaves some fields blank (videos have no color palette, many photographers have no location or social links). Empty values are kept so every row has the same shape.
Can I schedule it or use the API? Yes. Run it on a schedule, call it from the API, or connect it to your workflows and export JSON, CSV or Excel.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
searchQueriesarrayOptionalSearch terms
Keywords to search on Pexels, one per line (e.g. nature, city skyline, coffee). Each term is its own search with its own result limit.
startUrlsarrayOptionalPexels URLs or IDs
Any mix of Pexels links: photo or video pages (or bare IDs like 27860686), collections (or slugs like aquatic-aesthetic-bw7dkse), photographer profiles (or @handles), search result pages with their filters, or the discover page.
mediaTypeenumOptionaldefault "photos"Media type
Which kind of media to return. With 'Photos and videos' a search returns half photos, half videos.
maxItemsintegerOptionaldefault 20Max results per input
Maximum results for each search term, URL, ID or the discover feed. The limit applies per input, so the run total can be up to this number times the number of inputs (one search term plus the discover feed with 5 gives up to 10). 0 = everything Pexels serves (capped by your maximum charge).
Search filters run on Pexels' side. For photographers, collections and the discover feed, orientation, size and duration are checked on each result.
orientationenumOptionaldefault "all"Orientation
Image or video orientation.
colorenumOptionaldefault "all"Color (photos)
Dominant color of photo search results.
peopleCountenumOptionaldefault "all"Number of people
How many people appear in the photo or video (search only).
peopleAgeenumOptionaldefault "all"Age group
Age of the people shown (search only).
datePostedenumOptionaldefault "all"Date posted
Only media published in this period (search only).
minWidthintegerOptionalMinimum width (px)
Only media at least this wide. Leave empty for any size.
minHeightintegerOptionalMinimum height (px)
Only media at least this tall. Leave empty for any size.
minDurationintegerOptionalMinimum video duration (s)
Videos only. Leave empty for no minimum.
maxDurationintegerOptionalMaximum video duration (s)
Videos only. Leave empty for no maximum.
resolutionenumOptionaldefault "all"Video resolution
Minimum video resolution (video search only).
frameRateenumOptionaldefault "all"Video frame rate
Video frame rate (video search only).
similarToarrayOptionalFind similar to (photo/video URLs or IDs)
Returns media Pexels lists as related to each of these photos or videos.
includeDiscoverFeedbooleanOptionaldefault falseInclude the discover feed
Also return the newest curated media from Pexels' discover feed (no search term needed). The feed counts as its own input with its own Max results per input, on top of your search terms.
deepSearchbooleanOptionaldefault trueDeep search past 480 results
Pexels shows about 480 results per search. When you ask for more, the search is repeated with color, orientation and other filter splits to collect thousands of unique results.
dedupebooleanOptionaldefault trueSkip duplicates
Save each photo or video only once per run, even if several inputs return it.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies work well for Pexels.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| type | string | photo or video |
| id | number | Pexels media ID |
| url | string | Pexels page URL |
| title | string | |
| width | number | null | |
| height | number | null | |
| tags | array | |
| photographer | string | |
| downloadUrl | string | |
| videoFiles | array |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Result | One Pexels photo or video saved to the dataset, with download URLs, tags, colors, dimensions and photographer details. | $0.002 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('echofield/pexels-scraper').call({
"searchQueries": [
"nature"
],
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run echofield/pexels-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=echofield/pexels-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Free stock photo search.
Photos filtered by orientation and color.
Free stock video search by resolution.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.