{
  "data": {
    "id": "fUY2cTF0SfpZTpIw6",
    "actId": "2EIffCKePvtaP7w1K",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-10-24T01:33:13.502Z",
    "finishedAt": "2026-10-24T01:33:33.266Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 19686,
      "runTimeSecs": 19.686,
      "computeUnits": 0.021873333333333335,
      "imageSizeBytes": 367868928
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Facebook Photos Scraper Input\",\n  \"description\": \"Collect public Facebook photos from a page, profile, album, photo permalink, tagged collection, or albums list.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"startUrls\": {\n      \"title\": \"Facebook URLs\",\n      \"type\": \"array\",\n      \"description\": \"Facebook page, profile, photos tab, tagged tab, albums tab, album, or single-photo URL. Bare handles such as nasa are accepted too.\",\n      \"editor\": \"requestListSources\",\n      \"prefill\": [\n        {\n          \"url\": \"https://www.facebook.com/humansofnewyork/photos\"\n        }\n      ],\n      \"items\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"url\"\n        ],\n        \"properties\": {\n          \"url\": {\n            \"type\": \"string\",\n            \"title\": \"URL of a web page\",\n            \"description\": \"Facebook page, profile, photo album, photos tab, tagged tab, or photo permalink.\"\n          }\n        }\n      }\n    },\n    \"resultsLimit\": {\n      \"title\": \"Maximum number of photos\",\n      \"type\": \"integer\",\n      \"description\": \"Global cap across all Start URLs. The actor keeps paginating until this many photos are collected or the source runs out.\",\n      \"minimum\": 1,\n      \"prefill\": 1,\n      \"editor\": \"number\",\n      \"default\": 100\n    },\n    \"newerThan\": {\n      \"title\": \"Only photos newer than\",\n      \"type\": \"string\",\n      \"description\": \"Only include photos posted on or after this date (YYYY-MM-DD). Applied by Facebook for page and tagged tabs. For albums the actor reads each photo timestamp (even with includeDetails off) and applies the bound; rows stay grid-only.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"\"\n    },\n    \"olderThan\": {\n      \"title\": \"Only photos older than\",\n      \"type\": \"string\",\n      \"description\": \"Only include photos posted on or before this date (YYYY-MM-DD). Applied by Facebook for page and tagged tabs. For albums the actor reads each photo timestamp (even with includeDetails off) and applies the bound; rows stay grid-only.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"\"\n    },\n    \"photoTab\": {\n      \"title\": \"Photo tab\",\n      \"type\": \"string\",\n      \"description\": \"For page and profile URLs: photos uploaded by the page, or photos where the page is tagged by others. Ignored for album and photo URLs.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"uploaded\",\n        \"tagged\"\n      ],\n      \"enumTitles\": [\n        \"Photos uploaded by the page\",\n        \"Photos the page is tagged in\"\n      ],\n      \"default\": \"uploaded\",\n      \"prefill\": \"uploaded\"\n    },\n    \"includeAlbums\": {\n      \"title\": \"Also collect albums\",\n      \"type\": \"boolean\",\n      \"description\": \"For page and profile URLs, also walk every album listed on the page's Albums tab and collect its photos. A photos_albums URL implies this automatically.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeDetails\": {\n      \"title\": \"Include photo details\",\n      \"type\": \"boolean\",\n      \"description\": \"Open each photo to add its caption, timestamp, reactions, comments, shares, tagged people, owner, album, and post link. Turn off for a fast grid-only export; album date bounds still read only the timestamp needed for filtering.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"storeImages\": {\n      \"title\": \"Store images permanently\",\n      \"type\": \"boolean\",\n      \"description\": \"Copy each full-size image and thumbnail to Apify storage and return non-expiring URLs. The signed Facebook originals and their expiry are kept in the record.\",\n      \"default\": true,\n      \"prefill\": true\n    }\n  },\n  \"required\": [\n    \"startUrls\"\n  ]\n}",
    "readme": "# Facebook Page Photo Gallery & Engagement Scraper\n\nCollect public Facebook photos from pages, profiles, albums, tagged collections, and single-photo links. Each row carries the full-size image and thumbnail, caption, upload time, reaction breakdown, comment and share counts, tagged people, owner/page context, album, and post link. No login, cookies, browser, or proxy setup.\n\n## What this actor does\n\n- Walks a page or profile's **Photos** tab or its **Tagged** tab; add both URLs to collect both\n- Expands **albums**, a page's **Albums** list, or a direct album URL into its photos\n- Accepts **single-photo permalinks** and photo paths\n- Follows Facebook's cursor pagination 8 photos at a time, de-duplicates, and keeps going past the first 8-photo batch\n- Applies `newerThan` / `olderThan` on Facebook's side for page and tagged tabs (Unix-second query arguments)\n- Opens each photo for caption, timestamp, reactions (7 types), comments, shares, tagged people, album, post, and owner\n- Copies images to durable storage by default and keeps the signed original plus its expiry\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `startUrls` | array | – | Page, profile, `/photos`, `/photos_by`, `/photos_stream`, `/photos_of`, `/photos_albums`, album, photo permalink, or bare handle |\n| `resultsLimit` | integer | `100` | Global cap across all Start URLs |\n| `newerThan` | string | – | Keep photos posted on or after this `YYYY-MM-DD` |\n| `olderThan` | string | – | Keep photos posted on or before this `YYYY-MM-DD` |\n| `photoTab` | select | `uploaded` | For page/profile URLs: `uploaded` or `tagged` |\n| `includeAlbums` | boolean | `false` | Also walk every album on a page/profile |\n| `includeDetails` | boolean | `true` | Open each photo; turn off for a fast grid-only export. Album date bounds still read only the timestamp needed for filtering |\n| `storeImages` | boolean | `true` | Store permanent image and thumbnail copies in Apify storage |\n\n`proxyConfiguration` is no longer an input. The actor selects its own connection path; old saved tasks that still send the key are accepted and the key is ignored.\n\n### Examples\n\nA page's recent photos:\n\n```json\n{\n  \"startUrls\": [{\"url\": \"https://www.facebook.com/humansofnewyork/photos\"}],\n  \"resultsLimit\": 50\n}\n```\n\nTagged photos of a page:\n\n```json\n{\n  \"startUrls\": [{\"url\": \"https://www.facebook.com/nike\"}],\n  \"photoTab\": \"tagged\",\n  \"resultsLimit\": 100\n}\n```\n\nEvery album on a page:\n\n```json\n{\n  \"startUrls\": [{\"url\": \"https://www.facebook.com/nasa/photos_albums\"}],\n  \"resultsLimit\": 300\n}\n```\n\nA date window:\n\n```json\n{\n  \"startUrls\": [{\"url\": \"https://www.facebook.com/nationalgeographic/photos\"}],\n  \"newerThan\": \"2025-01-01\",\n  \"olderThan\": \"2025-12-31\",\n  \"resultsLimit\": 200\n}\n```\n\nA single photo:\n\n```json\n{\n  \"startUrls\": [{\"url\": \"https://www.facebook.com/photo/?fbid=1547667900257527\"}]\n}\n```\n\n## Output per photo\n\nLegacy fields keep their names: `photoId`, `photoUrl`, `imageUrl`, `caption`, `altText`, `timestamp`, `likesCount`, `commentsCount`, `reactionsByType`, `reactionsTotal`, `shareCount`, `taggedPeople`, `authorName`, `authorUrl`, `inputUrl`, `scrapedAt`.\n\nAdded fields include `imageUrlOriginal`, `imageExpiresAt`, `imageWidth`, `imageHeight`, `thumbnailUrl`, `thumbnailUrlOriginal`, `ocrText` (Facebook's accessibility caption, not a second OCR pass), `createdTime`, `likeCount`…`angryCount`, `uploaderId/Name/Url`, `pageId/Name/Url/Followers`, `albumId`, `albumName`, `postId`, `postUrl`, `sourceType`, and `detailsStatus`.\n\n`likesCount` keeps its old meaning (total reactions); `likeCount` is the LIKE reaction only. Empty values are omitted. A photo without a caption simply has no `caption` key; a zero count is kept when Facebook reports zero. With `includeDetails` off, album rows have only the grid thumbnail and thumbnail dimensions; `imageUrl` requires details. Album date bounds still work in this mode: the actor reads just the timestamp and keeps the row grid-only.\n\n## Pagination and limits\n\nFacebook returns 8 photos per collection request. The actor follows the cursor until the source ends, `resultsLimit` is reached, three consecutive requests add no new ids, or a duplicate-heavy safety budget is hit. A collection also stops after 2,000 pages (about 16,000 photos) as a safety cap. When a target stops early, the status message notes the shortfall; the log may not name the exact stop cause. No 1,000-photo or 5,000-photo artificial cap is applied.\n\n## Image links and storage\n\nFacebook's CDN links are signed and expire. With `storeImages` on (default), each image and thumbnail is copied to Apify storage; when a copy succeeds, `imageUrl` / `thumbnailUrl` become permanent public links. `imageUrlOriginal` and `imageExpiresAt` preserve the source. If a copy fails, the signed source link is kept and the run continues. With `storeImages` off, the signed links are returned as-is and the expiry is still recorded.\n\n## What this actor cannot collect\n\n- **Photo location** — Facebook does not expose a place/location for photos on these surfaces\n- **Multiple image resolutions** — the photo viewer exposes one image URI plus width/height\n- **Private profiles, login-only pages, and groups** — only what a logged-out visitor sees\n- **Comment bodies or reactor identities** — counts only; use the comments actor for threads\n- **Videos and Reels** — the Photos collections contain photos; use the posts/reels actors for video\n- **One row per album** — album metadata is attached to its photos; an albums-list URL expands into photos\n\n## FAQ\n\n**Do I need a Facebook account?**\nNo. The actor reads only public, logged-out content and never asks for cookies or credentials.\n\n**Why did a target return no photos?**\nIt may not exist, be private, or hide its Photos tab from logged-out visitors. The final status message names failed targets.\n\n**Why are some captions or owner names missing?**\nFacebook genuinely has no caption for some photos, and occasionally omits the uploader's display name. Empty fields are omitted rather than filled with guesses.\n\n**What does `detailsStatus` mean?**\n`Complete` means the photo page was read; `GridOnly` means details were turned off; `Unavailable` means the photo page could not be read, so grid fields were kept.\n\n**Why do some images need a slower request?**\nGallery pages are free to read. Individual photo pages are often served as a stripped page to datacenter IPs, so the actor automatically retries the detail request through a residential connection. The gallery does not use that path.\n\n**How many photos can I get?**\nAs many as the page exposes to a logged-out visitor, up to `resultsLimit`. A collection stops after 2,000 pages (about 16,000 photos) even if more remain. Thousands of photos have been walked from one page; duplicate-heavy pages may stop at the safety budget and the status message notes the shortfall.\n\n**Can I filter by date?**\nYes. Use `YYYY-MM-DD`. Page and tagged tabs send the window to Facebook. Albums have no server-side date filter, so each photo has to be opened and checked. This works even with `includeDetails` off: the actor reads only the timestamp needed for the bound, keeps the row grid-only, and stops with a clear status if the window is not reached within the scan budget. An album date run costs one detail request per photo examined.\n\n**Are image links permanent?**\nWith `storeImages` on, yes, when the copy succeeds; a failed copy leaves the signed source link. With it off, Facebook's signed links expire.\n\n**Is this affiliated with Facebook?**\nNo. This is an independent third-party tool that reads public pages; it is not affiliated with or endorsed by Meta.\n\n## Data source\n\nPublic `facebook.com` pages, profiles, photo albums, and photo permalinks, read without login. The actor does not bypass private content or login walls.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "facebook-page-photo-gallery-and-engagement-scraper",
      "title": "Facebook Page Photo Gallery & Engagement Scraper",
      "description": "Collect public Facebook page, profile, album, tagged, and single-photo galleries with captions, reactions, comments, shares, tagged people, owner and album context, and permanent image links.",
      "version": "1.0",
      "meta": {
        "templateId": "python-start"
      },
      "input": {
        "title": "Facebook Photos Scraper Input",
        "description": "Collect public Facebook photos from a page, profile, album, photo permalink, tagged collection, or albums list.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "startUrls": {
            "title": "Facebook URLs",
            "type": "array",
            "description": "Facebook page, profile, photos tab, tagged tab, albums tab, album, or single-photo URL. Bare handles such as nasa are accepted too.",
            "editor": "requestListSources",
            "prefill": [
              {
                "url": "https://www.facebook.com/humansofnewyork/photos"
              }
            ],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "description": "Facebook page, profile, photo album, photos tab, tagged tab, or photo permalink."
                }
              }
            }
          },
          "resultsLimit": {
            "title": "Maximum number of photos",
            "type": "integer",
            "description": "Global cap across all Start URLs. The actor keeps paginating until this many photos are collected or the source runs out.",
            "minimum": 1,
            "prefill": 1,
            "editor": "number",
            "default": 100
          },
          "newerThan": {
            "title": "Only photos newer than",
            "type": "string",
            "description": "Only include photos posted on or after this date (YYYY-MM-DD). Applied by Facebook for page and tagged tabs. For albums the actor reads each photo timestamp (even with includeDetails off) and applies the bound; rows stay grid-only.",
            "editor": "textfield",
            "prefill": ""
          },
          "olderThan": {
            "title": "Only photos older than",
            "type": "string",
            "description": "Only include photos posted on or before this date (YYYY-MM-DD). Applied by Facebook for page and tagged tabs. For albums the actor reads each photo timestamp (even with includeDetails off) and applies the bound; rows stay grid-only.",
            "editor": "textfield",
            "prefill": ""
          },
          "photoTab": {
            "title": "Photo tab",
            "type": "string",
            "description": "For page and profile URLs: photos uploaded by the page, or photos where the page is tagged by others. Ignored for album and photo URLs.",
            "editor": "select",
            "enum": [
              "uploaded",
              "tagged"
            ],
            "enumTitles": [
              "Photos uploaded by the page",
              "Photos the page is tagged in"
            ],
            "default": "uploaded",
            "prefill": "uploaded"
          },
          "includeAlbums": {
            "title": "Also collect albums",
            "type": "boolean",
            "description": "For page and profile URLs, also walk every album listed on the page's Albums tab and collect its photos. A photos_albums URL implies this automatically.",
            "default": false,
            "prefill": false
          },
          "includeDetails": {
            "title": "Include photo details",
            "type": "boolean",
            "description": "Open each photo to add its caption, timestamp, reactions, comments, shares, tagged people, owner, album, and post link. Turn off for a fast grid-only export; album date bounds still read only the timestamp needed for filtering.",
            "default": true,
            "prefill": true
          },
          "storeImages": {
            "title": "Store images permanently",
            "type": "boolean",
            "description": "Copy each full-size image and thumbnail to Apify storage and return non-expiring URLs. The signed Facebook originals and their expiry are kept in the record.",
            "default": true,
            "prefill": true
          }
        },
        "required": [
          "startUrls"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Facebook Page Photo Gallery & Engagement Scraper Output",
        "description": "One row per public Facebook photo with image and thumbnail links, caption, timestamp, reaction breakdown, comments, shares, tagged people, owner/page/album/post context, and source metadata.",
        "properties": {
          "photos": {
            "type": "string",
            "title": "Facebook Photo Data",
            "description": "Dataset of public Facebook photos with engagement and context fields. Empty fields are omitted.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "readme": "# Facebook Page Photo Gallery & Engagement Scraper\n\nCollect public Facebook photos from pages, profiles, albums, tagged collections, and single-photo links. Each row carries the full-size image and thumbnail, caption, upload time, reaction breakdown, comment and share counts, tagged people, owner/page context, album, and post link. No login, cookies, browser, or proxy setup.\n\n## What this actor does\n\n- Walks a page or profile's **Photos** tab or its **Tagged** tab; add both URLs to collect both\n- Expands **albums**, a page's **Albums** list, or a direct album URL into its photos\n- Accepts **single-photo permalinks** and photo paths\n- Follows Facebook's cursor pagination 8 photos at a time, de-duplicates, and keeps going past the first 8-photo batch\n- Applies `newerThan` / `olderThan` on Facebook's side for page and tagged tabs (Unix-second query arguments)\n- Opens each photo for caption, timestamp, reactions (7 types), comments, shares, tagged people, album, post, and owner\n- Copies images to durable storage by default and keeps the signed original plus its expiry\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `startUrls` | array | – | Page, profile, `/photos`, `/photos_by`, `/photos_stream`, `/photos_of`, `/photos_albums`, album, photo permalink, or bare handle |\n| `resultsLimit` | integer | `100` | Global cap across all Start URLs |\n| `newerThan` | string | – | Keep photos posted on or after this `YYYY-MM-DD` |\n| `olderThan` | string | – | Keep photos posted on or before this `YYYY-MM-DD` |\n| `photoTab` | select | `uploaded` | For page/profile URLs: `uploaded` or `tagged` |\n| `includeAlbums` | boolean | `false` | Also walk every album on a page/profile |\n| `includeDetails` | boolean | `true` | Open each photo; turn off for a fast grid-only export. Album date bounds still read only the timestamp needed for filtering |\n| `storeImages` | boolean | `true` | Store permanent image and thumbnail copies in Apify storage |\n\n`proxyConfiguration` is no longer an input. The actor selects its own connection path; old saved tasks that still send the key are accepted and the key is ignored.\n\n### Examples\n\nA page's recent photos:\n\n```json\n{\n  \"startUrls\": [{\"url\": \"https://www.facebook.com/humansofnewyork/photos\"}],\n  \"resultsLimit\": 50\n}\n```\n\nTagged photos of a page:\n\n```json\n{\n  \"startUrls\": [{\"url\": \"https://www.facebook.com/nike\"}],\n  \"photoTab\": \"tagged\",\n  \"resultsLimit\": 100\n}\n```\n\nEvery album on a page:\n\n```json\n{\n  \"startUrls\": [{\"url\": \"https://www.facebook.com/nasa/photos_albums\"}],\n  \"resultsLimit\": 300\n}\n```\n\nA date window:\n\n```json\n{\n  \"startUrls\": [{\"url\": \"https://www.facebook.com/nationalgeographic/photos\"}],\n  \"newerThan\": \"2025-01-01\",\n  \"olderThan\": \"2025-12-31\",\n  \"resultsLimit\": 200\n}\n```\n\nA single photo:\n\n```json\n{\n  \"startUrls\": [{\"url\": \"https://www.facebook.com/photo/?fbid=1547667900257527\"}]\n}\n```\n\n## Output per photo\n\nLegacy fields keep their names: `photoId`, `photoUrl`, `imageUrl`, `caption`, `altText`, `timestamp`, `likesCount`, `commentsCount`, `reactionsByType`, `reactionsTotal`, `shareCount`, `taggedPeople`, `authorName`, `authorUrl`, `inputUrl`, `scrapedAt`.\n\nAdded fields include `imageUrlOriginal`, `imageExpiresAt`, `imageWidth`, `imageHeight`, `thumbnailUrl`, `thumbnailUrlOriginal`, `ocrText` (Facebook's accessibility caption, not a second OCR pass), `createdTime`, `likeCount`…`angryCount`, `uploaderId/Name/Url`, `pageId/Name/Url/Followers`, `albumId`, `albumName`, `postId`, `postUrl`, `sourceType`, and `detailsStatus`.\n\n`likesCount` keeps its old meaning (total reactions); `likeCount` is the LIKE reaction only. Empty values are omitted. A photo without a caption simply has no `caption` key; a zero count is kept when Facebook reports zero. With `includeDetails` off, album rows have only the grid thumbnail and thumbnail dimensions; `imageUrl` requires details. Album date bounds still work in this mode: the actor reads just the timestamp and keeps the row grid-only.\n\n## Pagination and limits\n\nFacebook returns 8 photos per collection request. The actor follows the cursor until the source ends, `resultsLimit` is reached, three consecutive requests add no new ids, or a duplicate-heavy safety budget is hit. A collection also stops after 2,000 pages (about 16,000 photos) as a safety cap. When a target stops early, the status message notes the shortfall; the log may not name the exact stop cause. No 1,000-photo or 5,000-photo artificial cap is applied.\n\n## Image links and storage\n\nFacebook's CDN links are signed and expire. With `storeImages` on (default), each image and thumbnail is copied to Apify storage; when a copy succeeds, `imageUrl` / `thumbnailUrl` become permanent public links. `imageUrlOriginal` and `imageExpiresAt` preserve the source. If a copy fails, the signed source link is kept and the run continues. With `storeImages` off, the signed links are returned as-is and the expiry is still recorded.\n\n## What this actor cannot collect\n\n- **Photo location** — Facebook does not expose a place/location for photos on these surfaces\n- **Multiple image resolutions** — the photo viewer exposes one image URI plus width/height\n- **Private profiles, login-only pages, and groups** — only what a logged-out visitor sees\n- **Comment bodies or reactor identities** — counts only; use the comments actor for threads\n- **Videos and Reels** — the Photos collections contain photos; use the posts/reels actors for video\n- **One row per album** — album metadata is attached to its photos; an albums-list URL expands into photos\n\n## FAQ\n\n**Do I need a Facebook account?**\nNo. The actor reads only public, logged-out content and never asks for cookies or credentials.\n\n**Why did a target return no photos?**\nIt may not exist, be private, or hide its Photos tab from logged-out visitors. The final status message names failed targets.\n\n**Why are some captions or owner names missing?**\nFacebook genuinely has no caption for some photos, and occasionally omits the uploader's display name. Empty fields are omitted rather than filled with guesses.\n\n**What does `detailsStatus` mean?**\n`Complete` means the photo page was read; `GridOnly` means details were turned off; `Unavailable` means the photo page could not be read, so grid fields were kept.\n\n**Why do some images need a slower request?**\nGallery pages are free to read. Individual photo pages are often served as a stripped page to datacenter IPs, so the actor automatically retries the detail request through a residential connection. The gallery does not use that path.\n\n**How many photos can I get?**\nAs many as the page exposes to a logged-out visitor, up to `resultsLimit`. A collection stops after 2,000 pages (about 16,000 photos) even if more remain. Thousands of photos have been walked from one page; duplicate-heavy pages may stop at the safety budget and the status message notes the shortfall.\n\n**Can I filter by date?**\nYes. Use `YYYY-MM-DD`. Page and tagged tabs send the window to Facebook. Albums have no server-side date filter, so each photo has to be opened and checked. This works even with `includeDetails` off: the actor reads only the timestamp needed for the bound, keeps the row grid-only, and stops with a clear status if the window is not reached within the scan budget. An album date run costs one detail request per photo examined.\n\n**Are image links permanent?**\nWith `storeImages` on, yes, when the copy succeeds; a failed copy leaves the signed source link. With it off, Facebook's signed links expire.\n\n**Is this affiliated with Facebook?**\nNo. This is an independent third-party tool that reads public pages; it is not affiliated with or endorsed by Meta.\n\n## Data source\n\nPublic `facebook.com` pages, profiles, photo albums, and photo permalinks, read without login. The actor does not bypass private content or login walls.\n",
      "categories": [
        "SOCIAL_MEDIA"
      ],
      "dockerfile": "../Dockerfile",
      "defaultRunOptions": {
        "timeoutSecs": 3600,
        "memoryMbytes": 512
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "Facebook Photos Data",
          "views": {
            "overview": {
              "title": "Overview",
              "transformation": {
                "fields": [
                  "photoId",
                  "photoUrl",
                  "imageUrl",
                  "thumbnailUrl",
                  "caption",
                  "pageName",
                  "timestamp",
                  "reactionsTotal",
                  "commentsCount",
                  "shareCount"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "photoId": {
                    "label": "Photo ID",
                    "format": "text"
                  },
                  "photoUrl": {
                    "label": "Photo URL",
                    "format": "link"
                  },
                  "imageUrl": {
                    "label": "Image",
                    "format": "link"
                  },
                  "thumbnailUrl": {
                    "label": "Thumbnail",
                    "format": "link"
                  },
                  "caption": {
                    "label": "Caption",
                    "format": "text"
                  },
                  "pageName": {
                    "label": "Page",
                    "format": "text"
                  },
                  "timestamp": {
                    "label": "Posted",
                    "format": "text"
                  },
                  "reactionsTotal": {
                    "label": "Reactions",
                    "format": "number"
                  },
                  "commentsCount": {
                    "label": "Comments",
                    "format": "number"
                  },
                  "shareCount": {
                    "label": "Shares",
                    "format": "number"
                  }
                }
              }
            },
            "detailed": {
              "title": "Detailed",
              "transformation": {
                "fields": [
                  "photoId",
                  "photoUrl",
                  "imageUrl",
                  "imageUrlOriginal",
                  "imageExpiresAt",
                  "imageWidth",
                  "imageHeight",
                  "thumbnailUrl",
                  "thumbnailUrlOriginal",
                  "caption",
                  "altText",
                  "ocrText",
                  "createdTime",
                  "timestamp",
                  "likesCount",
                  "likeCount",
                  "loveCount",
                  "careCount",
                  "hahaCount",
                  "wowCount",
                  "sadCount",
                  "angryCount",
                  "reactionsByType",
                  "reactionsTotal",
                  "commentsCount",
                  "shareCount",
                  "taggedPeople",
                  "authorName",
                  "authorUrl",
                  "uploaderId",
                  "uploaderName",
                  "uploaderUrl",
                  "pageId",
                  "pageName",
                  "pageUrl",
                  "pageFollowers",
                  "albumId",
                  "albumName",
                  "postId",
                  "postUrl",
                  "sourceType",
                  "detailsStatus",
                  "inputUrl",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "photoId": {
                    "label": "Photo ID",
                    "format": "text"
                  },
                  "photoUrl": {
                    "label": "Photo URL",
                    "format": "link"
                  },
                  "imageUrl": {
                    "label": "Image",
                    "format": "link"
                  },
                  "imageUrlOriginal": {
                    "label": "Image (original)",
                    "format": "link"
                  },
                  "imageExpiresAt": {
                    "label": "Image expires",
                    "format": "text"
                  },
                  "imageWidth": {
                    "label": "Width",
                    "format": "number"
                  },
                  "imageHeight": {
                    "label": "Height",
                    "format": "number"
                  },
                  "thumbnailUrl": {
                    "label": "Thumbnail",
                    "format": "link"
                  },
                  "thumbnailUrlOriginal": {
                    "label": "Thumbnail (original)",
                    "format": "link"
                  },
                  "caption": {
                    "label": "Caption",
                    "format": "text"
                  },
                  "altText": {
                    "label": "Alt text",
                    "format": "text"
                  },
                  "ocrText": {
                    "label": "OCR text (alt text)",
                    "format": "text"
                  },
                  "createdTime": {
                    "label": "Created (Unix)",
                    "format": "number"
                  },
                  "timestamp": {
                    "label": "Posted",
                    "format": "text"
                  },
                  "likesCount": {
                    "label": "Reactions total",
                    "format": "number"
                  },
                  "likeCount": {
                    "label": "Like",
                    "format": "number"
                  },
                  "loveCount": {
                    "label": "Love",
                    "format": "number"
                  },
                  "careCount": {
                    "label": "Care",
                    "format": "number"
                  },
                  "hahaCount": {
                    "label": "Haha",
                    "format": "number"
                  },
                  "wowCount": {
                    "label": "Wow",
                    "format": "number"
                  },
                  "sadCount": {
                    "label": "Sad",
                    "format": "number"
                  },
                  "angryCount": {
                    "label": "Angry",
                    "format": "number"
                  },
                  "reactionsByType": {
                    "label": "Reactions by type",
                    "format": "object"
                  },
                  "reactionsTotal": {
                    "label": "Reactions",
                    "format": "number"
                  },
                  "commentsCount": {
                    "label": "Comments",
                    "format": "number"
                  },
                  "shareCount": {
                    "label": "Shares",
                    "format": "number"
                  },
                  "taggedPeople": {
                    "label": "Tagged people",
                    "format": "array"
                  },
                  "authorName": {
                    "label": "Author",
                    "format": "text"
                  },
                  "authorUrl": {
                    "label": "Author URL",
                    "format": "link"
                  },
                  "uploaderId": {
                    "label": "Uploader ID",
                    "format": "text"
                  },
                  "uploaderName": {
                    "label": "Uploader",
                    "format": "text"
                  },
                  "uploaderUrl": {
                    "label": "Uploader URL",
                    "format": "link"
                  },
                  "pageId": {
                    "label": "Page ID",
                    "format": "text"
                  },
                  "pageName": {
                    "label": "Page",
                    "format": "text"
                  },
                  "pageUrl": {
                    "label": "Page URL",
                    "format": "link"
                  },
                  "pageFollowers": {
                    "label": "Page followers",
                    "format": "number"
                  },
                  "albumId": {
                    "label": "Album ID",
                    "format": "text"
                  },
                  "albumName": {
                    "label": "Album",
                    "format": "text"
                  },
                  "postId": {
                    "label": "Post ID",
                    "format": "text"
                  },
                  "postUrl": {
                    "label": "Post URL",
                    "format": "link"
                  },
                  "sourceType": {
                    "label": "Source",
                    "format": "text"
                  },
                  "detailsStatus": {
                    "label": "Details",
                    "format": "text"
                  },
                  "inputUrl": {
                    "label": "Input URL",
                    "format": "link"
                  },
                  "scrapedAt": {
                    "label": "Scraped at",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      }
    },
    "buildNumber": "1.0.2",
    "imageDigest": "9b94e950cd1b7cadbf390d686d541b281d2defc38aeaeb3dbd8b5420d09b3527",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.021873333333333335
    }
  }
}