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

Extract public photos from a Facebook page. Each row includes the photo id, image URL, photo link, and the accessibility caption Facebook publishes.
Extract the public photos from any Facebook page or profile and get each photo's image URL, Facebook link, accessibility caption, and size. No login, no cookies, and just $1.00 per 1,000 photos.
ocrText.| Field | Key | What it does |
|---|---|---|
| Facebook URLs | startUrls | Public page or profile URLs, such as https://www.facebook.com/humansofnewyork. A photos tab URL is also accepted. |
| Photos per URL | resultsLimit | How many photos to save per URL. Default 10. |
| Proxy configuration | proxyConfiguration | Datacenter by default. Residential if a page only loads from a residential IP. |
{
"startUrls": [
{ "url": "https://www.facebook.com/humansofnewyork" }
],
"resultsLimit": 10,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": ["DATACENTER"]
}
}
One dataset row per photo.
| Field | Description |
|---|---|
image | Direct URL of the image file. |
url | Facebook photo page link. |
id | Facebook photo item id. |
ocrText | Accessibility caption, such as "May be an image of child and text". |
width, height | Image size in pixels. |
dataType | Always photo. |
facebookUrl, inputUrl | The page the photo came from. |
facebookId, pageAdLibrary | Collection id and page details from Facebook. |
{
"facebookUrl": "https://www.facebook.com/humansofnewyork",
"id": "YXBwX2l0ZW06MTAwMDUwNDI5OTUyNDIwOjIzMDUyNzI3MzI6NTo6MTY3NDYzMTQ2NzU2MTE2OQ==",
"image": "https://scontent-iad3-1.xx.fbcdn.net/v/t39.99422-6/846467687_1626254438940479_40...",
"url": "https://www.facebook.com/photo.php?fbid=1674631467561169&set=pb.100050429952420...",
"dataType": "photo",
"ocrText": "May be an image of child and text",
"width": 2048,
"height": 1365,
"inputUrl": "https://www.facebook.com/humansofnewyork"
}
(Trimmed: image and photo links are shortened here and the row also carries facebookId and pageAdLibrary.) A page that does not exist, or whose photos need a login, returns one row with error set to not_available. Missing pages are not charged.
You pay $0.001 per photo saved, which is $1.00 per 1,000 photos. Platform usage (compute and proxy) is billed on top.
Worked example: 10 photos cost 10 × $0.001 = $0.01 in events plus about $0.002 of platform usage, around $0.012 in total.
The actor only reads what is publicly visible without logging in. You are responsible for respecting copyright, privacy law, and Facebook's terms when you use the images.
No login or cookies. Datacenter proxy is built in and used by default.
Not reliably. Album, tagged-photo, and single-photo URLs that redirect to a login page come back as an error row. Use the page or profile URL.
As many as you set per URL, limited by how many photos the page shows publicly.
The caption or size can be missing for some photos. Those fields are then null or left out.
Yes, from the console or through the API.
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.
startUrlsarrayRequiredFacebook URLs
Public Facebook page or profile URLs, such as https://www.facebook.com/humansofnewyork. A photos tab URL is also accepted.
resultsLimitintegerOptionaldefault 10Photos per URL
How many photos to save for each Facebook URL.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies are used by default. Switch to residential if a page only loads from a residential IP. Proxy traffic is billed per GB, and compute is billed separately.
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 |
|---|---|---|
| image | string | null | Direct URL of the photo image. |
| url | string | null | Facebook photo page URL. |
| ocrText | string | null | Accessibility caption Facebook publishes for the photo. |
| dataType | string | null | Media type, usually photo. |
| facebookUrl | string | null | Facebook page or photos tab the photo was scraped from. |
| inputUrl | string | null | URL from the input that produced this photo. |
| id | string | null | Facebook id of the photo in the page collection. |
| facebookId | string | null | Id of the photo collection on the page. |
| width | number | null | Width of the photo in pixels. |
| height | number | null | Height of the photo in pixels. |
| pageAdLibrary | object | null | Ad Library id for the source page. |
| navSections | array | null | Photo tabs on the page when the input is a photos URL. |
| validatedUrls | array | null | URLs that were accepted when the run found no page. |
| error | string | null | Error code when a URL returned no public photos. |
| errorDescription | string | null | Why that URL returned no public photos. |
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 |
|---|---|---|
| Photo | Each photo written to the dataset. | $0.001 |
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/facebook-photos-scraper').call({
"startUrls": [
{
"url": "https://www.facebook.com/humansofnewyork"
}
],
"resultsLimit": 10,
"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/facebook-photos-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/facebook-photos-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.
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.