{
  "data": {
    "id": "h0iKfwqSwh7BxMhin",
    "actId": "jmrqhxVYbhWWAmj0W",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-11-07T08:55:25.025Z",
    "finishedAt": "2026-11-07T08:55:29.884Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 4781,
      "runTimeSecs": 4.781,
      "computeUnits": 0.0053122222222222225,
      "imageSizeBytes": 318949376
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Snapchat Lens Scraper Input\",\n  \"description\": \"Browse Snapchat's public lens charts by category, look up lenses by URL or UUID, or search the Explore lens tab by keyword.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"What to scrape\",\n      \"type\": \"string\",\n      \"description\": \"Browse the public lens charts, fetch specific lenses, or search the Explore lens tab.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"home\",\n        \"detail\",\n        \"search\"\n      ],\n      \"enumTitles\": [\n        \"Browse lens charts by category\",\n        \"Look up specific lenses by URL or UUID\",\n        \"Search lenses by keyword\"\n      ],\n      \"default\": \"home\",\n      \"prefill\": \"home\"\n    },\n    \"category\": {\n      \"title\": \"Lens chart category\",\n      \"type\": \"string\",\n      \"description\": \"(mode=home) Which public Snapchat lens chart to page through. For You, Trending and Face are the deepest charts; World, Music and Live are shorter.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"for_you\",\n        \"trending\",\n        \"face\",\n        \"world\",\n        \"music\",\n        \"web_live\"\n      ],\n      \"enumTitles\": [\n        \"For You\",\n        \"Trending\",\n        \"Face\",\n        \"World\",\n        \"Music\",\n        \"Live\"\n      ],\n      \"default\": \"for_you\",\n      \"prefill\": \"for_you\"\n    },\n    \"lensUrlsOrIds\": {\n      \"title\": \"Lens URLs or UUIDs\",\n      \"type\": \"array\",\n      \"description\": \"(mode=detail) Lens page URLs (snapchat.com/lens/{uuid}), unlock URLs with a uuid= parameter, or bare 32-character UUIDs.\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"565e7595ec4e4a0da689762b127308ef\"\n      ]\n    },\n    \"keywords\": {\n      \"title\": \"Search keywords\",\n      \"type\": \"array\",\n      \"description\": \"(mode=search) Keywords, brands or creator names to search on the public Snapchat Explore lens tab. Snapchat returns at most 24 lenses per keyword.\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"food\"\n      ]\n    },\n    \"includeMoreLenses\": {\n      \"title\": \"Include related lenses\",\n      \"type\": \"boolean\",\n      \"description\": \"(mode=detail) Include the related lenses Snapchat shows beside the lens. Up to 12 are returned; the lens itself is excluded when Snapchat includes it.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeSpotlightsUsingLens\": {\n      \"title\": \"Include related Spotlights\",\n      \"type\": \"boolean\",\n      \"description\": \"(mode=detail) Include Spotlight videos that use this lens, with thumbnails, media URLs, creator details, engagement counts and AI-generated descriptions when public.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"maxItems\": {\n      \"title\": \"Maximum records\",\n      \"type\": \"integer\",\n      \"description\": \"Global cap on saved records. Home mode pages through the selected chart until this cap or the end of the chart; the other modes stop when their inputs are exhausted.\",\n      \"default\": 100,\n      \"minimum\": 1,\n      \"maximum\": 100000,\n      \"prefill\": 24\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy configuration\",\n      \"type\": \"object\",\n      \"description\": \"Optional proxy override. Snapchat's public lens pages work without a proxy; leave this empty unless you hit rate limiting.\",\n      \"editor\": \"proxy\",\n      \"nullable\": true\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Snapchat AR Lens Metadata & Related Spotlight Finder\n\nSnapchat's public lens pages are a catalog of AR effects: each one carries a creator credit, preview media, a Snapcode, related lenses and the Spotlight videos that were recorded with it. This actor reads those pages directly over HTTP. It can page through the lens charts, open specific lenses by URL or UUID, and search the Explore lens tab. No Snapchat account, cookies or proxy are required.\n\n## What this actor does\n\n- **Chart mode:** pages through the public lens charts — For You, Trending, Face, World, Music and Live — following Snapchat's own cursor until the chart ends or `maxItems` is reached.\n- **Detail mode:** accepts lens page URLs, unlock URLs or bare UUIDs and returns the full lens record, the related lenses shown beside it, and the Spotlight videos using it.\n- **Spotlight enrichment:** batches every related Spotlight ID through Snapchat's public metadata endpoint to add creator identity, caption, hashtags, media URL, view/share/boost/recommend/comment counts and AI-generated title, description and keywords.\n- **Search mode:** reads the public Explore lens tab for each keyword and returns up to the 24 lens cards Snapchat renders for that query.\n- Omits fields the source does not provide, at every nesting level, instead of returning blanks or nulls.\n\n## Output per lens record\n\nChart and detail records share one field set; Explore search records use the lighter set Snapchat exposes on search cards.\n\n### Chart / detail lens (`source: \"home\"` or `\"detail\"`)\n\n- `scannableUuid` — the lens UUID used in its page and unlock URLs.\n- `lensName`, `lensId` — display name and internal numeric ID.\n- `lensCreatorDisplayName`, `lensCreatorUsername`, `userProfileUrl` — creator identity when Snapchat publishes it.\n- `lensPreviewImageUrl`, `lensPreviewVideoUrl` — static and animated previews.\n- `iconUrl` — the square carousel icon.\n- `unlockUrl` — the URL that opens the lens in Snapchat.\n- `snapcodeImageUrl` — the Snapcode image exposed on the lens page.\n- `lensCreatorSearchTags` — discoverability tags set by the creator.\n- `isOfficialSnapLens` — whether Snapchat marks the lens as official.\n- `lastUpdatedAt` — ISO timestamp when Snapchat exposes a non-zero update epoch.\n- `lensUrl` — the canonical `snapchat.com/lens/{uuid}` page.\n- `category` — the chart used (`home` mode only).\n- `source`, `scrapedAt` — origin and fetch timestamp.\n- `moreLenses` — up to 12 related lenses on detail records, each with the same lens fields (the lens itself is excluded when present).\n- `spotlightsUsingThisLens` — related Spotlight videos on detail records.\n\n### Related Spotlight entry (`spotlightsUsingThisLens[]`)\n\n- `snapId`, `storyPageUrl`, `contentUrl` — Spotlight identity and links.\n- `thumbnailUrl` — video poster.\n- `uploadedAt`, `durationMs`, `width`, `height` — video facts from the lens page.\n- `embeddedTextCaption`, `keywords`, `description`, `name` — page-level text when present.\n- `creatorUsername`, `creatorDisplayName`, `creatorIsOfficial` — creator identity from hydration.\n- `caption`, `hashtags`, `videoUrl` — post text, hashtags and the direct media URL.\n- `viewCount`, `shareCount`, `boostCount`, `recommendCount`, `commentCount` — public engagement counters.\n- `aiTitle`, `aiDescription`, `aiKeywords` — Snapchat's AI-generated summary fields when available.\n\nRemoved or private Spotlight videos keep the page-level fields and simply omit the hydration fields.\n\n### Explore search result (`source: \"search\"`)\n\n- `lensId`, `lensName`, `scannableUuid`, `lensUrl`.\n- `iconUrl`, `unlockUrl`, `thumbnailUrl` — icon, unlock link and preview thumbnail.\n- `creatorName`, `creatorIsOfficial` — creator credit from the card.\n- `searchKeyword`, `source`, `scrapedAt`.\n\nIf a page cannot be fetched or parsed, the actor saves a short row with `error` (plus `input` or `searchKeyword`) instead of silently dropping it.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `home` | `home` (browse charts), `detail` (specific lenses) or `search` (Explore lens tab). |\n| `category` | string | `for_you` | Chart to page through in `home`: `for_you`, `trending`, `face`, `world`, `music`, `web_live`. |\n| `lensUrlsOrIds` | array | – | Lens page URLs, unlock URLs or bare UUIDs for `detail`. |\n| `keywords` | array | – | Keywords, brands or creator names for `search`. |\n| `includeMoreLenses` | boolean | `true` | Include the related lenses on detail records. |\n| `includeSpotlightsUsingLens` | boolean | `true` | Include and hydrate the related Spotlight videos on detail records. |\n| `maxItems` | integer | `100` | Global record cap; home mode pages until this cap or the chart ends. |\n| `proxyConfiguration` | object | – | Optional proxy override; public lens pages work without one. |\n\n### Example: page through the Trending chart\n\n```json\n{\n  \"mode\": \"home\",\n  \"category\": \"trending\",\n  \"maxItems\": 72\n}\n```\n\n### Example: two lenses with related lenses and Spotlight enrichment\n\n```json\n{\n  \"mode\": \"detail\",\n  \"lensUrlsOrIds\": [\n    \"https://www.snapchat.com/lens/565e7595ec4e4a0da689762b127308ef\",\n    \"dc98faf460f54b7fb6e119d4d7b7c0c3\"\n  ],\n  \"includeMoreLenses\": true,\n  \"includeSpotlightsUsingLens\": true\n}\n```\n\n### Example: search the Explore lens tab\n\n```json\n{\n  \"mode\": \"search\",\n  \"keywords\": [\"food\", \"plumbing\", \"हिंदी\"]\n}\n```\n\n### Example: detail without enrichment\n\n```json\n{\n  \"mode\": \"detail\",\n  \"lensUrlsOrIds\": [\"565e7595ec4e4a0da689762b127308ef\"],\n  \"includeMoreLenses\": false,\n  \"includeSpotlightsUsingLens\": false\n}\n```\n\n## Use cases\n\n- Monitor which AR lenses Snapchat is promoting in each chart over time.\n- Pull a lens's creator, preview media and Snapcode for a creative or brand-safety review.\n- Find the Spotlight videos that used a lens, with their view and reaction counts.\n- Discover adjacent lenses through the related-lens list.\n- Research which lenses appear for a brand, trend or topic in Explore search.\n\n## FAQ\n\n### How deep can chart mode go?\n\nFor You, Trending and Face keep serving pages for many cursors; World, Music and Live are shorter and end after a few pages. The actor follows `cursor_id` until Snapchat reports no more pages or `maxItems` is reached, so raise `maxItems` when you need the long tail.\n\n### Why does search return at most 24 lenses per keyword?\n\nThe Explore lens tab renders one 24-card page. Snapchat does not expose a cursor or page parameter on that tab; probing `cursor_id`, `page`, `offset` and similar parameters returns the same cards. Use narrower keywords to partition a topic.\n\n### Why do some related Spotlights have no view counts?\n\nThe lens page lists up to 16 related Spotlights, but some have been removed or made private by the time the actor hydrates them. Those entries keep the page-level thumbnail, timestamp and caption, and omit the hydration fields rather than inventing numbers.\n\n### Why are some creator fields missing?\n\nSnapchat only publishes `lensCreatorUsername` and `userProfileUrl` for some lenses, mostly non-official creator lenses. Chart entries and official lenses often leave those fields empty; the record omits them instead of returning a blank.\n\n### What is `snapcodeImageUrl`?\n\nThe Snapcode image Snapchat renders on the lens page. It is separate from `iconUrl`, which is the small carousel icon, and from the `unlockUrl`, which opens the lens in the Snapchat app.\n\n### Are view or share counts available for the lens itself?\n\nNo. Snapchat's public lens page does not expose engagement numbers for the lens. Engagement counts in this actor belong to the related Spotlight videos that used the lens.\n\n### Does the actor need a proxy or login?\n\nNo. Every surface used here is public and works cookieless. The optional `proxyConfiguration` field exists only as an override for unusual rate limiting.\n\n### What happens if Snapchat changes its page structure?\n\nThe actor returns an `error` row for the affected input and logs the failure. It never fabricates a partial record to hide an upstream change.\n\n### Is this affiliated with Snapchat?\n\nNo. This is an independent tool that reads public Snapchat pages and is not operated or endorsed by Snap Inc.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "snapchat-ar-lens-metadata-and-related-spotlight",
      "title": "Snapchat AR Lens Metadata & Related Spotlight Finder",
      "description": "Page through Snapchat's public lens charts by category, fetch lens details by URL or UUID, find related lenses, and enrich the Spotlight videos using each lens. Search the Explore lens tab by keyword. No login needed.",
      "version": "1.1",
      "meta": {
        "templateId": "python-start"
      },
      "buildTag": "latest",
      "input": {
        "title": "Snapchat Lens Scraper Input",
        "description": "Browse Snapchat's public lens charts by category, look up lenses by URL or UUID, or search the Explore lens tab by keyword.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "What to scrape",
            "type": "string",
            "description": "Browse the public lens charts, fetch specific lenses, or search the Explore lens tab.",
            "editor": "select",
            "enum": [
              "home",
              "detail",
              "search"
            ],
            "enumTitles": [
              "Browse lens charts by category",
              "Look up specific lenses by URL or UUID",
              "Search lenses by keyword"
            ],
            "default": "home",
            "prefill": "home"
          },
          "category": {
            "title": "Lens chart category",
            "type": "string",
            "description": "(mode=home) Which public Snapchat lens chart to page through. For You, Trending and Face are the deepest charts; World, Music and Live are shorter.",
            "editor": "select",
            "enum": [
              "for_you",
              "trending",
              "face",
              "world",
              "music",
              "web_live"
            ],
            "enumTitles": [
              "For You",
              "Trending",
              "Face",
              "World",
              "Music",
              "Live"
            ],
            "default": "for_you",
            "prefill": "for_you"
          },
          "lensUrlsOrIds": {
            "title": "Lens URLs or UUIDs",
            "type": "array",
            "description": "(mode=detail) Lens page URLs (snapchat.com/lens/{uuid}), unlock URLs with a uuid= parameter, or bare 32-character UUIDs.",
            "editor": "stringList",
            "prefill": [
              "565e7595ec4e4a0da689762b127308ef"
            ]
          },
          "keywords": {
            "title": "Search keywords",
            "type": "array",
            "description": "(mode=search) Keywords, brands or creator names to search on the public Snapchat Explore lens tab. Snapchat returns at most 24 lenses per keyword.",
            "editor": "stringList",
            "prefill": [
              "food"
            ]
          },
          "includeMoreLenses": {
            "title": "Include related lenses",
            "type": "boolean",
            "description": "(mode=detail) Include the related lenses Snapchat shows beside the lens. Up to 12 are returned; the lens itself is excluded when Snapchat includes it.",
            "default": true,
            "prefill": true
          },
          "includeSpotlightsUsingLens": {
            "title": "Include related Spotlights",
            "type": "boolean",
            "description": "(mode=detail) Include Spotlight videos that use this lens, with thumbnails, media URLs, creator details, engagement counts and AI-generated descriptions when public.",
            "default": true,
            "prefill": true
          },
          "maxItems": {
            "title": "Maximum records",
            "type": "integer",
            "description": "Global cap on saved records. Home mode pages through the selected chart until this cap or the end of the chart; the other modes stop when their inputs are exhausted.",
            "default": 100,
            "minimum": 1,
            "maximum": 100000,
            "prefill": 24
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional proxy override. Snapchat's public lens pages work without a proxy; leave this empty unless you hit rate limiting.",
            "editor": "proxy",
            "nullable": true
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Snapchat AR Lens Metadata & Related Spotlight Finder Output",
        "description": "Dataset links for Snapchat lens rows: chart and search lenses, full detail records, related lenses, and hydrated Spotlight videos using each lens.",
        "properties": {
          "lenses": {
            "type": "string",
            "title": "Snapchat lens records",
            "description": "Dataset containing every scraped Snapchat lens, related lens and Spotlight-usage row.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "readme": "# Snapchat AR Lens Metadata & Related Spotlight Finder\n\nSnapchat's public lens pages are a catalog of AR effects: each one carries a creator credit, preview media, a Snapcode, related lenses and the Spotlight videos that were recorded with it. This actor reads those pages directly over HTTP. It can page through the lens charts, open specific lenses by URL or UUID, and search the Explore lens tab. No Snapchat account, cookies or proxy are required.\n\n## What this actor does\n\n- **Chart mode:** pages through the public lens charts — For You, Trending, Face, World, Music and Live — following Snapchat's own cursor until the chart ends or `maxItems` is reached.\n- **Detail mode:** accepts lens page URLs, unlock URLs or bare UUIDs and returns the full lens record, the related lenses shown beside it, and the Spotlight videos using it.\n- **Spotlight enrichment:** batches every related Spotlight ID through Snapchat's public metadata endpoint to add creator identity, caption, hashtags, media URL, view/share/boost/recommend/comment counts and AI-generated title, description and keywords.\n- **Search mode:** reads the public Explore lens tab for each keyword and returns up to the 24 lens cards Snapchat renders for that query.\n- Omits fields the source does not provide, at every nesting level, instead of returning blanks or nulls.\n\n## Output per lens record\n\nChart and detail records share one field set; Explore search records use the lighter set Snapchat exposes on search cards.\n\n### Chart / detail lens (`source: \"home\"` or `\"detail\"`)\n\n- `scannableUuid` — the lens UUID used in its page and unlock URLs.\n- `lensName`, `lensId` — display name and internal numeric ID.\n- `lensCreatorDisplayName`, `lensCreatorUsername`, `userProfileUrl` — creator identity when Snapchat publishes it.\n- `lensPreviewImageUrl`, `lensPreviewVideoUrl` — static and animated previews.\n- `iconUrl` — the square carousel icon.\n- `unlockUrl` — the URL that opens the lens in Snapchat.\n- `snapcodeImageUrl` — the Snapcode image exposed on the lens page.\n- `lensCreatorSearchTags` — discoverability tags set by the creator.\n- `isOfficialSnapLens` — whether Snapchat marks the lens as official.\n- `lastUpdatedAt` — ISO timestamp when Snapchat exposes a non-zero update epoch.\n- `lensUrl` — the canonical `snapchat.com/lens/{uuid}` page.\n- `category` — the chart used (`home` mode only).\n- `source`, `scrapedAt` — origin and fetch timestamp.\n- `moreLenses` — up to 12 related lenses on detail records, each with the same lens fields (the lens itself is excluded when present).\n- `spotlightsUsingThisLens` — related Spotlight videos on detail records.\n\n### Related Spotlight entry (`spotlightsUsingThisLens[]`)\n\n- `snapId`, `storyPageUrl`, `contentUrl` — Spotlight identity and links.\n- `thumbnailUrl` — video poster.\n- `uploadedAt`, `durationMs`, `width`, `height` — video facts from the lens page.\n- `embeddedTextCaption`, `keywords`, `description`, `name` — page-level text when present.\n- `creatorUsername`, `creatorDisplayName`, `creatorIsOfficial` — creator identity from hydration.\n- `caption`, `hashtags`, `videoUrl` — post text, hashtags and the direct media URL.\n- `viewCount`, `shareCount`, `boostCount`, `recommendCount`, `commentCount` — public engagement counters.\n- `aiTitle`, `aiDescription`, `aiKeywords` — Snapchat's AI-generated summary fields when available.\n\nRemoved or private Spotlight videos keep the page-level fields and simply omit the hydration fields.\n\n### Explore search result (`source: \"search\"`)\n\n- `lensId`, `lensName`, `scannableUuid`, `lensUrl`.\n- `iconUrl`, `unlockUrl`, `thumbnailUrl` — icon, unlock link and preview thumbnail.\n- `creatorName`, `creatorIsOfficial` — creator credit from the card.\n- `searchKeyword`, `source`, `scrapedAt`.\n\nIf a page cannot be fetched or parsed, the actor saves a short row with `error` (plus `input` or `searchKeyword`) instead of silently dropping it.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `home` | `home` (browse charts), `detail` (specific lenses) or `search` (Explore lens tab). |\n| `category` | string | `for_you` | Chart to page through in `home`: `for_you`, `trending`, `face`, `world`, `music`, `web_live`. |\n| `lensUrlsOrIds` | array | – | Lens page URLs, unlock URLs or bare UUIDs for `detail`. |\n| `keywords` | array | – | Keywords, brands or creator names for `search`. |\n| `includeMoreLenses` | boolean | `true` | Include the related lenses on detail records. |\n| `includeSpotlightsUsingLens` | boolean | `true` | Include and hydrate the related Spotlight videos on detail records. |\n| `maxItems` | integer | `100` | Global record cap; home mode pages until this cap or the chart ends. |\n| `proxyConfiguration` | object | – | Optional proxy override; public lens pages work without one. |\n\n### Example: page through the Trending chart\n\n```json\n{\n  \"mode\": \"home\",\n  \"category\": \"trending\",\n  \"maxItems\": 72\n}\n```\n\n### Example: two lenses with related lenses and Spotlight enrichment\n\n```json\n{\n  \"mode\": \"detail\",\n  \"lensUrlsOrIds\": [\n    \"https://www.snapchat.com/lens/565e7595ec4e4a0da689762b127308ef\",\n    \"dc98faf460f54b7fb6e119d4d7b7c0c3\"\n  ],\n  \"includeMoreLenses\": true,\n  \"includeSpotlightsUsingLens\": true\n}\n```\n\n### Example: search the Explore lens tab\n\n```json\n{\n  \"mode\": \"search\",\n  \"keywords\": [\"food\", \"plumbing\", \"हिंदी\"]\n}\n```\n\n### Example: detail without enrichment\n\n```json\n{\n  \"mode\": \"detail\",\n  \"lensUrlsOrIds\": [\"565e7595ec4e4a0da689762b127308ef\"],\n  \"includeMoreLenses\": false,\n  \"includeSpotlightsUsingLens\": false\n}\n```\n\n## Use cases\n\n- Monitor which AR lenses Snapchat is promoting in each chart over time.\n- Pull a lens's creator, preview media and Snapcode for a creative or brand-safety review.\n- Find the Spotlight videos that used a lens, with their view and reaction counts.\n- Discover adjacent lenses through the related-lens list.\n- Research which lenses appear for a brand, trend or topic in Explore search.\n\n## FAQ\n\n### How deep can chart mode go?\n\nFor You, Trending and Face keep serving pages for many cursors; World, Music and Live are shorter and end after a few pages. The actor follows `cursor_id` until Snapchat reports no more pages or `maxItems` is reached, so raise `maxItems` when you need the long tail.\n\n### Why does search return at most 24 lenses per keyword?\n\nThe Explore lens tab renders one 24-card page. Snapchat does not expose a cursor or page parameter on that tab; probing `cursor_id`, `page`, `offset` and similar parameters returns the same cards. Use narrower keywords to partition a topic.\n\n### Why do some related Spotlights have no view counts?\n\nThe lens page lists up to 16 related Spotlights, but some have been removed or made private by the time the actor hydrates them. Those entries keep the page-level thumbnail, timestamp and caption, and omit the hydration fields rather than inventing numbers.\n\n### Why are some creator fields missing?\n\nSnapchat only publishes `lensCreatorUsername` and `userProfileUrl` for some lenses, mostly non-official creator lenses. Chart entries and official lenses often leave those fields empty; the record omits them instead of returning a blank.\n\n### What is `snapcodeImageUrl`?\n\nThe Snapcode image Snapchat renders on the lens page. It is separate from `iconUrl`, which is the small carousel icon, and from the `unlockUrl`, which opens the lens in the Snapchat app.\n\n### Are view or share counts available for the lens itself?\n\nNo. Snapchat's public lens page does not expose engagement numbers for the lens. Engagement counts in this actor belong to the related Spotlight videos that used the lens.\n\n### Does the actor need a proxy or login?\n\nNo. Every surface used here is public and works cookieless. The optional `proxyConfiguration` field exists only as an override for unusual rate limiting.\n\n### What happens if Snapchat changes its page structure?\n\nThe actor returns an `error` row for the affected input and logs the failure. It never fabricates a partial record to hide an upstream change.\n\n### Is this affiliated with Snapchat?\n\nNo. This is an independent tool that reads public Snapchat pages and is not operated or endorsed by Snap Inc.\n",
      "dockerfile": "../Dockerfile",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "fields": {
            "scannableUuid": {
              "type": "string",
              "description": "Lens UUID used in lens and unlock URLs"
            },
            "lensName": {
              "type": "string",
              "description": "Lens display name"
            },
            "lensCreatorDisplayName": {
              "type": "string",
              "description": "Creator display name (home/detail)"
            },
            "lensCreatorUsername": {
              "type": "string",
              "description": "Creator username (home/detail)"
            },
            "lensId": {
              "type": "string",
              "description": "Internal numeric lens ID"
            },
            "lensPreviewImageUrl": {
              "type": "string",
              "description": "Preview image URL (home/detail)"
            },
            "lensPreviewVideoUrl": {
              "type": "string",
              "description": "Preview video URL (home/detail)"
            },
            "iconUrl": {
              "type": "string",
              "description": "Lens icon URL"
            },
            "unlockUrl": {
              "type": "string",
              "description": "Snapcode unlock URL (home/detail); deeplink URL (search)"
            },
            "userProfileUrl": {
              "type": "string",
              "description": "Creator Snapchat profile URL"
            },
            "lensCreatorSearchTags": {
              "type": "array",
              "description": "Search tags set by the lens creator"
            },
            "isOfficialSnapLens": {
              "type": "boolean",
              "description": "Whether this is an official Snapchat lens"
            },
            "lastUpdatedAt": {
              "type": "string",
              "description": "Last updated ISO 8601 UTC timestamp"
            },
            "snapcodeImageUrl": {
              "type": "string",
              "description": "Snapcode image URL exposed by the lens detail page"
            },
            "lensUrl": {
              "type": "string",
              "description": "Canonical lens page URL"
            },
            "category": {
              "type": "string",
              "description": "Chart category (home mode)"
            },
            "creatorName": {
              "type": "string",
              "description": "Creator name (search mode)"
            },
            "creatorIsOfficial": {
              "type": "boolean",
              "description": "Whether the creator is official (search mode)"
            },
            "thumbnailUrl": {
              "type": "string",
              "description": "Thumbnail URL (search/related Spotlight)"
            },
            "thumbnailSequence": {
              "type": "object",
              "description": "Animated thumbnail sequence metadata (legacy search results)"
            },
            "moreLenses": {
              "type": "array",
              "description": "Related lenses shown on the detail page"
            },
            "spotlightsUsingThisLens": {
              "type": "array",
              "description": "Spotlight videos using this lens, with metadata and hydration fields"
            },
            "searchKeyword": {
              "type": "string",
              "description": "Search keyword used (search mode)"
            },
            "source": {
              "type": "string",
              "description": "Data source: home, detail or search"
            },
            "input": {
              "type": "string",
              "description": "Original input value on an error row"
            },
            "error": {
              "type": "string",
              "description": "Error explanation on a failed lookup"
            },
            "scrapedAt": {
              "type": "string",
              "description": "ISO 8601 UTC scrape timestamp"
            }
          }
        }
      },
      "defaultMemoryMbytes": 512
    },
    "buildNumber": "1.1.1",
    "imageDigest": "1af0a354a7a7f415f0a87fb49f61686e090ed94891d76f85d6a84276eaddbf7a",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.0053122222222222225
    }
  }
}