{
  "data": {
    "id": "Y6tGkzMqVIlFeVcQD",
    "actId": "PRHVlSkm14JTKundY",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-11-05T19:42:59.411Z",
    "finishedAt": "2026-11-05T19:43:08.415Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 8919,
      "runTimeSecs": 8.919,
      "computeUnits": 0.00991,
      "imageSizeBytes": 319203328
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Snapchat Hashtag Scraper Input\",\n  \"description\": \"Collect public Snapchat Spotlight videos by hashtag, tag/topic URL, or Spotlight video URL, or page through the anonymous Spotlight feed. No login, cookies, or proxy required.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"Choose what to collect: videos for hashtags/topics, a paginated Spotlight feed, or specific Spotlight URLs.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"hashtagFeed\",\n        \"spotlightFeed\",\n        \"spotlightUrls\"\n      ],\n      \"enumTitles\": [\n        \"Hashtag or topic videos\",\n        \"Paginated Spotlight feed\",\n        \"Specific Spotlight URLs\"\n      ],\n      \"default\": \"hashtagFeed\",\n      \"prefill\": \"hashtagFeed\",\n      \"sectionCaption\": \"Mode\"\n    },\n    \"hashtags\": {\n      \"title\": \"Hashtags, topics, or URLs\",\n      \"type\": \"array\",\n      \"description\": \"Used in Hashtag or topic videos mode. Bare words (food), hash-prefixed tags (#travel), path forms (/tag/food, /topic/cappuccino-foam-technique), or full Snapchat URLs (https://www.snapchat.com/tag/food, https://www.snapchat.com/topic/cappuccino-foam-technique).\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": [],\n      \"prefill\": [\n        \"food\"\n      ],\n      \"sectionCaption\": \"Hashtag videos\",\n      \"sectionDescription\": \"Each hashtag is read from its tag page and Explore results, then combined and deduplicated.\"\n    },\n    \"resultsPerHashtag\": {\n      \"title\": \"Max videos per hashtag\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum videos to keep for each hashtag after combining the tag/topic page with Explore results. Snapchat serves about 32 videos per tag page plus about 20-25 Explore cards.\",\n      \"default\": 50,\n      \"minimum\": 1,\n      \"maximum\": 200,\n      \"prefill\": 3\n    },\n    \"includeVideoUrls\": {\n      \"title\": \"Include video URLs\",\n      \"type\": \"boolean\",\n      \"description\": \"Include the watermarked and unwatermarked MP4 CDN URLs. These URLs carry expiring Snapchat tokens, so download or re-host media soon after scraping.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeRelatedTopics\": {\n      \"title\": \"Include related topics and tags\",\n      \"type\": \"boolean\",\n      \"description\": \"Include related topics, related hashtags, and scene-to-interest (S2I) content tags when the page provides them.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"includeLlmMetadata\": {\n      \"title\": \"Include AI metadata\",\n      \"type\": \"boolean\",\n      \"description\": \"Include Snapchat's AI-generated title, description, and keywords when present.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeHashtagMetadata\": {\n      \"title\": \"Include hashtag metadata\",\n      \"type\": \"boolean\",\n      \"description\": \"Include hashtag identity fields (id, name, URL, source, description, and total video count when Snapchat exposes it) in every record.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"enrichDetails\": {\n      \"title\": \"Enrich with video details\",\n      \"type\": \"boolean\",\n      \"description\": \"Batch-fetch Snapchat's public video details endpoint to fill unwatermarked MP4 URLs, hashtags, AI metadata, duration, and exact engagement counts. Adds one request per 30 videos.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"spotlightUrls\": {\n      \"title\": \"Spotlight URLs or IDs\",\n      \"type\": \"array\",\n      \"description\": \"Used in Specific Spotlight URLs mode, or as the optional first seed in Paginated Spotlight feed mode. Accepts full Spotlight links (https://www.snapchat.com/@user/spotlight/ID), /spotlight/ID links, or raw IDs.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": [],\n      \"prefill\": [],\n      \"sectionCaption\": \"Spotlight URLs\",\n      \"sectionDescription\": \"Paste one or more public Spotlight video links or IDs.\"\n    },\n    \"feedPages\": {\n      \"title\": \"Feed pages\",\n      \"type\": \"integer\",\n      \"description\": \"How many pages of the Spotlight up-next feed to request in Paginated Spotlight feed mode. Each page adds about 20-23 videos; pagination stops early when Snapchat runs out.\",\n      \"default\": 5,\n      \"minimum\": 1,\n      \"maximum\": 50,\n      \"prefill\": 2\n    },\n    \"maxItems\": {\n      \"title\": \"Max items\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on the total number of video rows saved across the whole run.\",\n      \"default\": 1000,\n      \"minimum\": 1,\n      \"maximum\": 10000,\n      \"prefill\": 3,\n      \"sectionCaption\": \"Filters and limits\",\n      \"sectionDescription\": \"Applied after deduplication.\"\n    },\n    \"minViews\": {\n      \"title\": \"Minimum views\",\n      \"type\": \"integer\",\n      \"description\": \"Keep only videos with at least this many views. Use 0 to keep everything.\",\n      \"default\": 0,\n      \"minimum\": 0,\n      \"maximum\": 1000000000,\n      \"prefill\": 0\n    },\n    \"minLikes\": {\n      \"title\": \"Minimum likes\",\n      \"type\": \"integer\",\n      \"description\": \"Keep only videos with at least this many likes. Use 0 to keep everything.\",\n      \"default\": 0,\n      \"minimum\": 0,\n      \"maximum\": 1000000000,\n      \"prefill\": 0\n    },\n    \"sinceDate\": {\n      \"title\": \"Uploaded since\",\n      \"type\": \"string\",\n      \"description\": \"Keep only videos uploaded on or after this date. Use YYYY-MM-DD (for example 2026-01-01). Leave empty to keep all dates.\",\n      \"default\": \"\",\n      \"prefill\": \"\",\n      \"editor\": \"textfield\"\n    },\n    \"sortBy\": {\n      \"title\": \"Sort by\",\n      \"type\": \"string\",\n      \"description\": \"Order within each hashtag/topic group. Hashtags stay in the order you enter them; feed mode sorts the whole feed. Source order keeps Snapchat's own ranking.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"source\",\n        \"newest\",\n        \"mostViewed\",\n        \"mostLiked\"\n      ],\n      \"enumTitles\": [\n        \"Snapchat source order\",\n        \"Newest upload first\",\n        \"Most viewed first\",\n        \"Most liked first\"\n      ],\n      \"default\": \"source\",\n      \"prefill\": \"source\"\n    }\n  },\n  \"required\": []\n}",
    "readme": "# Snapchat Spotlight Hashtag Video Extractor\n\nSnapchat's public Spotlight surface publishes short videos under hashtags, long-tail topic hubs, and an anonymous up-next feed. This actor collects those videos — by hashtag, topic URL, specific Spotlight link, or a paginated feed walk — and returns creator identity, engagement counts, media links, captions, hashtags, Snapchat's AI metadata, and hashtag context. No Snapchat account, cookie, API key, or proxy is needed.\n\n## Modes\n\n| Mode | What it collects | Input |\n|---|---|---|\n| **Hashtag or topic videos** | One combined, deduplicated pool per hashtag: the tag page (about 28-32 videos) plus Explore results when Snapchat serves them, with optional video-detail enrichment | `hashtags` |\n| **Paginated Spotlight feed** | The anonymous Spotlight up-next feed, page by page, until `feedPages` or `maxItems` is reached | `feedPages`, optional `spotlightUrls` seed |\n| **Specific Spotlight URLs** | One row per public Spotlight link or raw Snap ID | `spotlightUrls` |\n\nTag pages do not paginate (`?page`, `?cursor`, `?offset`, `?limit` are ignored by Snapchat), so hashtag mode widens coverage by combining the tag page with Explore when it is available and — when enabled — enriching each video from Snapchat's public `fetchSpotlight` endpoint. Explore is best-effort: Snapchat sometimes returns 404 for `/explore/<query>`, in which case the tag page is still returned. Feed mode uses the same up-next API the public Spotlight viewer calls.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | select | `hashtagFeed` | `hashtagFeed`, `spotlightFeed`, or `spotlightUrls` |\n| `hashtags` | array | `[]` | Bare words, `#tags`, Snapchat tag/topic/Explore paths or URLs, or a Spotlight video URL |\n| `resultsPerHashtag` | integer | `50` | Keep up to this many videos per hashtag after merge (1-200) |\n| `includeVideoUrls` | boolean | `true` | Include watermarked and unwatermarked MP4 CDN links |\n| `includeRelatedTopics` | boolean | `true` | Include related topics, related hashtags, and S2I tags |\n| `includeLlmMetadata` | boolean | `true` | Include Snapchat AI title, description, and keywords |\n| `includeHashtagMetadata` | boolean | `true` | Include hashtag id/name/URL/source/description/video count |\n| `enrichDetails` | boolean | `true` | Batch-fetch public video details (unwatermarked URL, hashtags, AI metadata, exact counts) |\n| `spotlightUrls` | array | `[]` | Spotlight links/IDs for URL mode, or an optional feed seed |\n| `feedPages` | integer | `5` | Up-next pages to request in feed mode (1-50, about 20-23 videos/page) |\n| `maxItems` | integer | `1000` | Hard cap on total rows (1-10,000) |\n| `minViews` | integer | `0` | Keep videos with at least this many views |\n| `minLikes` | integer | `0` | Keep videos with at least this many likes |\n| `sinceDate` | string | `\"\"` | Keep videos uploaded on or after `YYYY-MM-DD` |\n| `sortBy` | select | `source` | Order within each hashtag group: `source`, `newest`, `mostViewed`, or `mostLiked` |\n\n### Example: one hashtag\n\n```json\n{\n  \"mode\": \"hashtagFeed\",\n  \"hashtags\": [\"food\"],\n  \"resultsPerHashtag\": 50,\n  \"maxItems\": 50\n}\n```\n\n### Example: several hashtags with a view filter\n\n```json\n{\n  \"mode\": \"hashtagFeed\",\n  \"hashtags\": [\"#travel\", \"humor\", \"https://www.snapchat.com/topic/cappuccino-foam-technique\"],\n  \"resultsPerHashtag\": 40,\n  \"minViews\": 10000,\n  \"sortBy\": \"mostViewed\",\n  \"maxItems\": 100\n}\n```\n\n### Example: paginated Spotlight feed\n\n```json\n{\n  \"mode\": \"spotlightFeed\",\n  \"feedPages\": 5,\n  \"maxItems\": 75\n}\n```\n\n### Example: specific Spotlight videos\n\n```json\n{\n  \"mode\": \"spotlightUrls\",\n  \"spotlightUrls\": [\n    \"https://www.snapchat.com/@sema_janu/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYYm1lZmlnbGh2AZ_JQccIAZ_JQLedAAAAAQ\",\n    \"W7_EDlXWTBiXAEEniNoMPwAAYZWF3aHF1eGNoAZ7bAR9JAZ7bAR8hAAAAAQ\"\n  ]\n}\n```\n\n## Output\n\nEach row is one Spotlight video.\n\n- `snap_id`, `story_id`, `composite_story_id`, `story_subtype`, `snap_url` — Snapchat identifiers and public URL\n- `video_url`, `video_url_unwatermarked`, `thumbnail_url`, `video_thumbnail_url`, `large_thumbnail_url`, `embed_url` — media links (CDN tokens expire)\n- `duration_seconds`, `width`, `height`, `encoding_format` — media facts\n- `creator_username`, `creator_display_name`, `creator_profile_url` — creator identity\n- `view_count`, `like_count`, `share_count`, `comment_count`, `pending_comment_count`, `remix_count`, `recommend_count`, `rewatch_count`, `screenshot_count`, `score` — engagement and ranking signals\n- `description`, `caption`, `keywords`, `hashtags`, `sub_titles`, `attachment_url` — text content\n- `upload_date`, `latest_update_at`, `scraped_at` — ISO 8601 UTC timestamps\n- `llm_title`, `llm_description`, `llm_keywords`, `s2i_tags`, `detected_language` — Snapchat AI and content classification\n- `sound_title`, `sound_artist`, `sound_thumbnail_url` — sound context when Snapchat exposes it\n- `searched_hashtag`, `hashtag_id`, `hashtag_name`, `hashtag_url`, `hashtag_source`, `hashtag_description`, `hashtag_video_count` — hashtag/topic context\n- `related_topics`, `related_s2i_tags`, `related_hashtags` — related topic graph and Explore topic rows\n- `record_type`, `source_type`, `rank`, `feed_page` — provenance (which surface produced the row)\n\nEmpty fields are omitted, never written as `null`, `\"\"`, `[]`, or `{}`. A field is present only when Snapchat actually supplied it.\n\n## Use cases\n\n- **Trend research** — see which Spotlight videos a hashtag is pushing right now\n- **Creator discovery** — find active creators in a niche with exact view/like/share counts\n- **Social listening** — repeat runs to track engagement movement for the same videos\n- **Brand-safety review** — scan `s2i_tags`, `hashtags`, and AI descriptions before associating a campaign with a hashtag\n- **Media archiving** — collect CDN MP4 and thumbnail links for a bounded set of videos\n\n## FAQ\n\n**Do I need a Snapchat account, cookies, or a proxy?**\nNo. Every surface used here is public and server-rendered, and the actor sends plain HTTP requests with no login, cookie jar, API key, or proxy configuration.\n\n**Why does hashtag mode return about 30-50 videos and not thousands?**\nSnapchat's tag pages cap at roughly 28-32 cards and the public tag page ignores page/cursor/offset parameters. Explore adds about 20-25 more with little overlap when Snapchat serves it, so the merged pool is usually about 40-55. This actor does not invent pagination that Snapchat does not expose. Use `spotlightFeed` mode for open-ended pagination, or run several related hashtags.\n\n**How does `spotlightFeed` paginate?**\nIt starts from a public Spotlight video and repeatedly calls Snapchat's up-next endpoint with the last video ID and the accumulated `tapStoryKey` values, exactly as the public viewer does. `feedPages` bounds the walk and `maxItems` caps the output.\n\n**Why are some videos missing `video_url_unwatermarked`?**\nNot every tag-page card includes the clean flat URL. `enrichDetails` batch-fetches Snapchat's public detail endpoint to fill it when available; some videos still only have the watermarked URL.\n\n**How long do video and thumbnail links stay valid?**\nThey carry Snapchat CDN tokens. Treat them as short-lived: download or re-host media soon after scraping.\n\n**Why do some rows have no `description` or `caption`?**\nFeed and detail cards do not always expose creator text; those rows keep the AI `llm_description` and omit `description` rather than fabricating one.\n\n**Can I pass `#food` and a full tag URL?**\nYes. `food`, `#food`, `https://www.snapchat.com/tag/food`, and topic/Explore URLs are all accepted. A full Spotlight video link is also accepted in `hashtags` and is routed to the video-detail path.\n\n**What happens to my old input?**\nThe legacy keys `hashtags`, `resultsPerHashtag`, `includeVideoUrls`, `includeRelatedTopics`, and `includeLlmMetadata` still work. Old-style inputs that omit `mode` run in hashtag mode. An old `proxyConfiguration` key is accepted but ignored.\n\n## Limitations\n\n- Tag pages are capped by Snapchat (about 28-32 videos) and do not paginate. Hashtag mode combines tag + Explore when Explore is available and is intentionally bounded by `resultsPerHashtag`.\n- Snapchat intermittently returns 404 for `/explore/<query>`; the actor treats that as a missing surface and returns the tag/topic page rows instead of failing.\n- `spotlightFeed` follows Snapchat's up-next recommendations; it is a discovery feed, not a hashtag-filtered feed. Rows carry `source_type=spotlightFeed` so they can be filtered.\n- Comment text and transcripts are not collected; only public engagement counts and metadata are included.\n- Media URLs are signed by Snapchat and can expire. The actor does not re-host media.\n- Feed and detail responses vary by country and can omit fields; those fields are omitted per record.\n- With several hashtags, rows stay grouped in input order; `sortBy` orders videos within each hashtag group (feed mode sorts the entire feed).\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "snapchat-spotlight-hashtag-video-extractor",
      "title": "Snapchat Spotlight Hashtag Video Extractor",
      "description": "Collect Snapchat Spotlight videos by hashtag, topic, or video URL, or page through the anonymous Spotlight feed. Export media URLs, creator details, engagement counts, captions, hashtags, AI metadata and hashtag context without a login.",
      "version": "1.0",
      "buildTag": "latest",
      "meta": {
        "templateId": "python-playwright"
      },
      "input": {
        "title": "Snapchat Hashtag Scraper Input",
        "description": "Collect public Snapchat Spotlight videos by hashtag, tag/topic URL, or Spotlight video URL, or page through the anonymous Spotlight feed. No login, cookies, or proxy required.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "Choose what to collect: videos for hashtags/topics, a paginated Spotlight feed, or specific Spotlight URLs.",
            "editor": "select",
            "enum": [
              "hashtagFeed",
              "spotlightFeed",
              "spotlightUrls"
            ],
            "enumTitles": [
              "Hashtag or topic videos",
              "Paginated Spotlight feed",
              "Specific Spotlight URLs"
            ],
            "default": "hashtagFeed",
            "prefill": "hashtagFeed",
            "sectionCaption": "Mode"
          },
          "hashtags": {
            "title": "Hashtags, topics, or URLs",
            "type": "array",
            "description": "Used in Hashtag or topic videos mode. Bare words (food), hash-prefixed tags (#travel), path forms (/tag/food, /topic/cappuccino-foam-technique), or full Snapchat URLs (https://www.snapchat.com/tag/food, https://www.snapchat.com/topic/cappuccino-foam-technique).",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": [],
            "prefill": [
              "food"
            ],
            "sectionCaption": "Hashtag videos",
            "sectionDescription": "Each hashtag is read from its tag page and Explore results, then combined and deduplicated."
          },
          "resultsPerHashtag": {
            "title": "Max videos per hashtag",
            "type": "integer",
            "description": "Maximum videos to keep for each hashtag after combining the tag/topic page with Explore results. Snapchat serves about 32 videos per tag page plus about 20-25 Explore cards.",
            "default": 50,
            "minimum": 1,
            "maximum": 200,
            "prefill": 3
          },
          "includeVideoUrls": {
            "title": "Include video URLs",
            "type": "boolean",
            "description": "Include the watermarked and unwatermarked MP4 CDN URLs. These URLs carry expiring Snapchat tokens, so download or re-host media soon after scraping.",
            "default": true,
            "prefill": true
          },
          "includeRelatedTopics": {
            "title": "Include related topics and tags",
            "type": "boolean",
            "description": "Include related topics, related hashtags, and scene-to-interest (S2I) content tags when the page provides them.",
            "default": true,
            "prefill": false
          },
          "includeLlmMetadata": {
            "title": "Include AI metadata",
            "type": "boolean",
            "description": "Include Snapchat's AI-generated title, description, and keywords when present.",
            "default": true,
            "prefill": true
          },
          "includeHashtagMetadata": {
            "title": "Include hashtag metadata",
            "type": "boolean",
            "description": "Include hashtag identity fields (id, name, URL, source, description, and total video count when Snapchat exposes it) in every record.",
            "default": true,
            "prefill": true
          },
          "enrichDetails": {
            "title": "Enrich with video details",
            "type": "boolean",
            "description": "Batch-fetch Snapchat's public video details endpoint to fill unwatermarked MP4 URLs, hashtags, AI metadata, duration, and exact engagement counts. Adds one request per 30 videos.",
            "default": true,
            "prefill": false
          },
          "spotlightUrls": {
            "title": "Spotlight URLs or IDs",
            "type": "array",
            "description": "Used in Specific Spotlight URLs mode, or as the optional first seed in Paginated Spotlight feed mode. Accepts full Spotlight links (https://www.snapchat.com/@user/spotlight/ID), /spotlight/ID links, or raw IDs.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": [],
            "prefill": [],
            "sectionCaption": "Spotlight URLs",
            "sectionDescription": "Paste one or more public Spotlight video links or IDs."
          },
          "feedPages": {
            "title": "Feed pages",
            "type": "integer",
            "description": "How many pages of the Spotlight up-next feed to request in Paginated Spotlight feed mode. Each page adds about 20-23 videos; pagination stops early when Snapchat runs out.",
            "default": 5,
            "minimum": 1,
            "maximum": 50,
            "prefill": 2
          },
          "maxItems": {
            "title": "Max items",
            "type": "integer",
            "description": "Hard cap on the total number of video rows saved across the whole run.",
            "default": 1000,
            "minimum": 1,
            "maximum": 10000,
            "prefill": 3,
            "sectionCaption": "Filters and limits",
            "sectionDescription": "Applied after deduplication."
          },
          "minViews": {
            "title": "Minimum views",
            "type": "integer",
            "description": "Keep only videos with at least this many views. Use 0 to keep everything.",
            "default": 0,
            "minimum": 0,
            "maximum": 1000000000,
            "prefill": 0
          },
          "minLikes": {
            "title": "Minimum likes",
            "type": "integer",
            "description": "Keep only videos with at least this many likes. Use 0 to keep everything.",
            "default": 0,
            "minimum": 0,
            "maximum": 1000000000,
            "prefill": 0
          },
          "sinceDate": {
            "title": "Uploaded since",
            "type": "string",
            "description": "Keep only videos uploaded on or after this date. Use YYYY-MM-DD (for example 2026-01-01). Leave empty to keep all dates.",
            "default": "",
            "prefill": "",
            "editor": "textfield"
          },
          "sortBy": {
            "title": "Sort by",
            "type": "string",
            "description": "Order within each hashtag/topic group. Hashtags stay in the order you enter them; feed mode sorts the whole feed. Source order keeps Snapchat's own ranking.",
            "editor": "select",
            "enum": [
              "source",
              "newest",
              "mostViewed",
              "mostLiked"
            ],
            "enumTitles": [
              "Snapchat source order",
              "Newest upload first",
              "Most viewed first",
              "Most liked first"
            ],
            "default": "source",
            "prefill": "source"
          }
        },
        "required": []
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Snapchat Spotlight Hashtag Video Extractor Output",
        "type": "object",
        "description": "Snapchat Spotlight videos from hashtags, topics, specific URLs, or the paginated Spotlight feed, with creator, engagement, media, AI metadata, and hashtag context.",
        "properties": {
          "results": {
            "type": "string",
            "description": "Dataset with scraped Snapchat Spotlight videos",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        },
        "fields": {
          "record_type": {
            "type": "string",
            "description": "Record kind; always video"
          },
          "source_type": {
            "type": "string",
            "description": "Where the row came from: tagPage, topicPage, exploreSearch, spotlightFeed, spotlightUrl, or spotlightDetail"
          },
          "rank": {
            "type": "integer",
            "description": "Position within its source page or feed page"
          },
          "feed_page": {
            "type": "integer",
            "description": "1-based Spotlight feed page for feed rows"
          },
          "snap_id": {
            "type": "string",
            "description": "Raw Snap ID"
          },
          "story_id": {
            "type": "string",
            "description": "Story ID string"
          },
          "composite_story_id": {
            "type": "string",
            "description": "Composite story ID (when present)"
          },
          "snap_url": {
            "type": "string",
            "description": "Public Snapchat Spotlight URL"
          },
          "video_url": {
            "type": "string",
            "description": "Watermarked video URL (CDN, may expire)"
          },
          "video_url_unwatermarked": {
            "type": "string",
            "description": "Unwatermarked flat video URL (CDN, may expire)"
          },
          "thumbnail_url": {
            "type": "string",
            "description": "Thumbnail image URL"
          },
          "video_thumbnail_url": {
            "type": "string",
            "description": "Alternate video thumbnail URL (when present)"
          },
          "large_thumbnail_url": {
            "type": "string",
            "description": "Large thumbnail URL (when present)"
          },
          "embed_url": {
            "type": "string",
            "description": "Public Spotlight embed URL (topic pages)"
          },
          "duration_seconds": {
            "type": "number",
            "description": "Video duration in seconds"
          },
          "width": {
            "type": "integer",
            "description": "Video width in pixels"
          },
          "height": {
            "type": "integer",
            "description": "Video height in pixels"
          },
          "encoding_format": {
            "type": "string",
            "description": "Video encoding format (e.g. video/mp4)"
          },
          "creator_username": {
            "type": "string",
            "description": "Creator Snapchat username"
          },
          "creator_display_name": {
            "type": "string",
            "description": "Creator display name"
          },
          "creator_profile_url": {
            "type": "string",
            "description": "Link to creator Snapchat profile"
          },
          "view_count": {
            "type": "integer",
            "description": "Total view count"
          },
          "like_count": {
            "type": "integer",
            "description": "Like/boost count"
          },
          "share_count": {
            "type": "integer",
            "description": "Share count"
          },
          "comment_count": {
            "type": "integer",
            "description": "Live comment/reply count (approved, publicly visible)"
          },
          "pending_comment_count": {
            "type": "integer",
            "description": "Comments awaiting moderation (only included when > 0)"
          },
          "remix_count": {
            "type": "integer",
            "description": "Remix count (only included when > 0)"
          },
          "recommend_count": {
            "type": "integer",
            "description": "Recommend count"
          },
          "rewatch_count": {
            "type": "integer",
            "description": "Rewatch count (only included when > 0)"
          },
          "screenshot_count": {
            "type": "integer",
            "description": "Screenshot count (only included when > 0)"
          },
          "score": {
            "type": "integer",
            "description": "Internal ranking score (when present at item level)"
          },
          "is_creator_suggestion": {
            "type": "boolean",
            "description": "Whether the snap is a creator suggestion (only when true)"
          },
          "is_featured": {
            "type": "boolean",
            "description": "Whether the snap is featured (only when true)"
          },
          "story_subtype": {
            "type": "integer",
            "description": "Story subtype code (when present)"
          },
          "description": {
            "type": "string",
            "description": "Snap description or AI description text"
          },
          "caption": {
            "type": "string",
            "description": "Snap caption text"
          },
          "keywords": {
            "type": "array",
            "description": "Keywords extracted from text metadata, AI keywords, or hashtags in the description"
          },
          "hashtags": {
            "type": "array",
            "description": "Hashtags found on the video + in its description/caption"
          },
          "sub_titles": {
            "type": "array",
            "description": "Overlay subtitle/caption objects (sparse)"
          },
          "attachment_url": {
            "type": "string",
            "description": "External attachment URL linked from the snap (sparse)"
          },
          "upload_date": {
            "type": "string",
            "description": "Snap creation timestamp in ISO 8601 UTC"
          },
          "latest_update_at": {
            "type": "string",
            "description": "Latest story update timestamp in ISO 8601 UTC (when present)"
          },
          "llm_title": {
            "type": "string",
            "description": "AI-generated title for the snap"
          },
          "llm_description": {
            "type": "string",
            "description": "AI-generated description for the snap"
          },
          "llm_keywords": {
            "type": "array",
            "description": "AI-generated keywords list"
          },
          "s2i_tags": {
            "type": "array",
            "description": "Snapchat scene-to-interest content classification tags"
          },
          "detected_language": {
            "type": "string",
            "description": "Detected language code when Snapchat provides one"
          },
          "sound_title": {
            "type": "string",
            "description": "Sound or music title when present"
          },
          "sound_artist": {
            "type": "string",
            "description": "Sound or music artist when present"
          },
          "sound_thumbnail_url": {
            "type": "string",
            "description": "Sound artwork URL when present"
          },
          "searched_hashtag": {
            "type": "string",
            "description": "Hashtag or topic used for this search"
          },
          "hashtag_id": {
            "type": "string",
            "description": "Normalized hashtag/topic slug"
          },
          "hashtag_name": {
            "type": "string",
            "description": "Hashtag/topic display name"
          },
          "hashtag_url": {
            "type": "string",
            "description": "Canonical Snapchat tag, topic, or Explore URL"
          },
          "hashtag_source": {
            "type": "string",
            "description": "Primary page the hashtag metadata came from"
          },
          "hashtag_description": {
            "type": "string",
            "description": "Topic page description when available"
          },
          "hashtag_video_count": {
            "type": "integer",
            "description": "Snapchat's reported video count for the hashtag/topic when available"
          },
          "related_topics": {
            "type": "array",
            "description": "Related topics/tags with tagName, score, level, topicId, and URL when available"
          },
          "related_s2i_tags": {
            "type": "array",
            "description": "Related scene-to-interest tags from the hashtag/topic page"
          },
          "related_hashtags": {
            "type": "array",
            "description": "Explore topic rows with hashtag name, video count, thumbnail, and icon URL"
          },
          "scraped_at": {
            "type": "string",
            "description": "ISO 8601 UTC timestamp when this record was scraped"
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "readme": "# Snapchat Spotlight Hashtag Video Extractor\n\nSnapchat's public Spotlight surface publishes short videos under hashtags, long-tail topic hubs, and an anonymous up-next feed. This actor collects those videos — by hashtag, topic URL, specific Spotlight link, or a paginated feed walk — and returns creator identity, engagement counts, media links, captions, hashtags, Snapchat's AI metadata, and hashtag context. No Snapchat account, cookie, API key, or proxy is needed.\n\n## Modes\n\n| Mode | What it collects | Input |\n|---|---|---|\n| **Hashtag or topic videos** | One combined, deduplicated pool per hashtag: the tag page (about 28-32 videos) plus Explore results when Snapchat serves them, with optional video-detail enrichment | `hashtags` |\n| **Paginated Spotlight feed** | The anonymous Spotlight up-next feed, page by page, until `feedPages` or `maxItems` is reached | `feedPages`, optional `spotlightUrls` seed |\n| **Specific Spotlight URLs** | One row per public Spotlight link or raw Snap ID | `spotlightUrls` |\n\nTag pages do not paginate (`?page`, `?cursor`, `?offset`, `?limit` are ignored by Snapchat), so hashtag mode widens coverage by combining the tag page with Explore when it is available and — when enabled — enriching each video from Snapchat's public `fetchSpotlight` endpoint. Explore is best-effort: Snapchat sometimes returns 404 for `/explore/<query>`, in which case the tag page is still returned. Feed mode uses the same up-next API the public Spotlight viewer calls.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | select | `hashtagFeed` | `hashtagFeed`, `spotlightFeed`, or `spotlightUrls` |\n| `hashtags` | array | `[]` | Bare words, `#tags`, Snapchat tag/topic/Explore paths or URLs, or a Spotlight video URL |\n| `resultsPerHashtag` | integer | `50` | Keep up to this many videos per hashtag after merge (1-200) |\n| `includeVideoUrls` | boolean | `true` | Include watermarked and unwatermarked MP4 CDN links |\n| `includeRelatedTopics` | boolean | `true` | Include related topics, related hashtags, and S2I tags |\n| `includeLlmMetadata` | boolean | `true` | Include Snapchat AI title, description, and keywords |\n| `includeHashtagMetadata` | boolean | `true` | Include hashtag id/name/URL/source/description/video count |\n| `enrichDetails` | boolean | `true` | Batch-fetch public video details (unwatermarked URL, hashtags, AI metadata, exact counts) |\n| `spotlightUrls` | array | `[]` | Spotlight links/IDs for URL mode, or an optional feed seed |\n| `feedPages` | integer | `5` | Up-next pages to request in feed mode (1-50, about 20-23 videos/page) |\n| `maxItems` | integer | `1000` | Hard cap on total rows (1-10,000) |\n| `minViews` | integer | `0` | Keep videos with at least this many views |\n| `minLikes` | integer | `0` | Keep videos with at least this many likes |\n| `sinceDate` | string | `\"\"` | Keep videos uploaded on or after `YYYY-MM-DD` |\n| `sortBy` | select | `source` | Order within each hashtag group: `source`, `newest`, `mostViewed`, or `mostLiked` |\n\n### Example: one hashtag\n\n```json\n{\n  \"mode\": \"hashtagFeed\",\n  \"hashtags\": [\"food\"],\n  \"resultsPerHashtag\": 50,\n  \"maxItems\": 50\n}\n```\n\n### Example: several hashtags with a view filter\n\n```json\n{\n  \"mode\": \"hashtagFeed\",\n  \"hashtags\": [\"#travel\", \"humor\", \"https://www.snapchat.com/topic/cappuccino-foam-technique\"],\n  \"resultsPerHashtag\": 40,\n  \"minViews\": 10000,\n  \"sortBy\": \"mostViewed\",\n  \"maxItems\": 100\n}\n```\n\n### Example: paginated Spotlight feed\n\n```json\n{\n  \"mode\": \"spotlightFeed\",\n  \"feedPages\": 5,\n  \"maxItems\": 75\n}\n```\n\n### Example: specific Spotlight videos\n\n```json\n{\n  \"mode\": \"spotlightUrls\",\n  \"spotlightUrls\": [\n    \"https://www.snapchat.com/@sema_janu/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYYm1lZmlnbGh2AZ_JQccIAZ_JQLedAAAAAQ\",\n    \"W7_EDlXWTBiXAEEniNoMPwAAYZWF3aHF1eGNoAZ7bAR9JAZ7bAR8hAAAAAQ\"\n  ]\n}\n```\n\n## Output\n\nEach row is one Spotlight video.\n\n- `snap_id`, `story_id`, `composite_story_id`, `story_subtype`, `snap_url` — Snapchat identifiers and public URL\n- `video_url`, `video_url_unwatermarked`, `thumbnail_url`, `video_thumbnail_url`, `large_thumbnail_url`, `embed_url` — media links (CDN tokens expire)\n- `duration_seconds`, `width`, `height`, `encoding_format` — media facts\n- `creator_username`, `creator_display_name`, `creator_profile_url` — creator identity\n- `view_count`, `like_count`, `share_count`, `comment_count`, `pending_comment_count`, `remix_count`, `recommend_count`, `rewatch_count`, `screenshot_count`, `score` — engagement and ranking signals\n- `description`, `caption`, `keywords`, `hashtags`, `sub_titles`, `attachment_url` — text content\n- `upload_date`, `latest_update_at`, `scraped_at` — ISO 8601 UTC timestamps\n- `llm_title`, `llm_description`, `llm_keywords`, `s2i_tags`, `detected_language` — Snapchat AI and content classification\n- `sound_title`, `sound_artist`, `sound_thumbnail_url` — sound context when Snapchat exposes it\n- `searched_hashtag`, `hashtag_id`, `hashtag_name`, `hashtag_url`, `hashtag_source`, `hashtag_description`, `hashtag_video_count` — hashtag/topic context\n- `related_topics`, `related_s2i_tags`, `related_hashtags` — related topic graph and Explore topic rows\n- `record_type`, `source_type`, `rank`, `feed_page` — provenance (which surface produced the row)\n\nEmpty fields are omitted, never written as `null`, `\"\"`, `[]`, or `{}`. A field is present only when Snapchat actually supplied it.\n\n## Use cases\n\n- **Trend research** — see which Spotlight videos a hashtag is pushing right now\n- **Creator discovery** — find active creators in a niche with exact view/like/share counts\n- **Social listening** — repeat runs to track engagement movement for the same videos\n- **Brand-safety review** — scan `s2i_tags`, `hashtags`, and AI descriptions before associating a campaign with a hashtag\n- **Media archiving** — collect CDN MP4 and thumbnail links for a bounded set of videos\n\n## FAQ\n\n**Do I need a Snapchat account, cookies, or a proxy?**\nNo. Every surface used here is public and server-rendered, and the actor sends plain HTTP requests with no login, cookie jar, API key, or proxy configuration.\n\n**Why does hashtag mode return about 30-50 videos and not thousands?**\nSnapchat's tag pages cap at roughly 28-32 cards and the public tag page ignores page/cursor/offset parameters. Explore adds about 20-25 more with little overlap when Snapchat serves it, so the merged pool is usually about 40-55. This actor does not invent pagination that Snapchat does not expose. Use `spotlightFeed` mode for open-ended pagination, or run several related hashtags.\n\n**How does `spotlightFeed` paginate?**\nIt starts from a public Spotlight video and repeatedly calls Snapchat's up-next endpoint with the last video ID and the accumulated `tapStoryKey` values, exactly as the public viewer does. `feedPages` bounds the walk and `maxItems` caps the output.\n\n**Why are some videos missing `video_url_unwatermarked`?**\nNot every tag-page card includes the clean flat URL. `enrichDetails` batch-fetches Snapchat's public detail endpoint to fill it when available; some videos still only have the watermarked URL.\n\n**How long do video and thumbnail links stay valid?**\nThey carry Snapchat CDN tokens. Treat them as short-lived: download or re-host media soon after scraping.\n\n**Why do some rows have no `description` or `caption`?**\nFeed and detail cards do not always expose creator text; those rows keep the AI `llm_description` and omit `description` rather than fabricating one.\n\n**Can I pass `#food` and a full tag URL?**\nYes. `food`, `#food`, `https://www.snapchat.com/tag/food`, and topic/Explore URLs are all accepted. A full Spotlight video link is also accepted in `hashtags` and is routed to the video-detail path.\n\n**What happens to my old input?**\nThe legacy keys `hashtags`, `resultsPerHashtag`, `includeVideoUrls`, `includeRelatedTopics`, and `includeLlmMetadata` still work. Old-style inputs that omit `mode` run in hashtag mode. An old `proxyConfiguration` key is accepted but ignored.\n\n## Limitations\n\n- Tag pages are capped by Snapchat (about 28-32 videos) and do not paginate. Hashtag mode combines tag + Explore when Explore is available and is intentionally bounded by `resultsPerHashtag`.\n- Snapchat intermittently returns 404 for `/explore/<query>`; the actor treats that as a missing surface and returns the tag/topic page rows instead of failing.\n- `spotlightFeed` follows Snapchat's up-next recommendations; it is a discovery feed, not a hashtag-filtered feed. Rows carry `source_type=spotlightFeed` so they can be filtered.\n- Comment text and transcripts are not collected; only public engagement counts and metadata are included.\n- Media URLs are signed by Snapchat and can expire. The actor does not re-host media.\n- Feed and detail responses vary by country and can omit fields; those fields are omitted per record.\n- With several hashtags, rows stay grouped in input order; `sortBy` orders videos within each hashtag group (feed mode sorts the entire feed).\n",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "Snapchat Spotlight Videos",
          "views": {
            "overview": {
              "title": "Video Overview",
              "transformation": {
                "fields": [
                  "snap_id",
                  "source_type",
                  "creator_username",
                  "description",
                  "view_count",
                  "like_count",
                  "share_count",
                  "comment_count",
                  "duration_seconds",
                  "searched_hashtag",
                  "snap_url"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "snap_id": {
                    "label": "Snap ID",
                    "format": "text"
                  },
                  "source_type": {
                    "label": "Source",
                    "format": "text"
                  },
                  "creator_username": {
                    "label": "Creator",
                    "format": "text"
                  },
                  "description": {
                    "label": "Description",
                    "format": "text"
                  },
                  "view_count": {
                    "label": "Views",
                    "format": "number"
                  },
                  "like_count": {
                    "label": "Likes",
                    "format": "number"
                  },
                  "share_count": {
                    "label": "Shares",
                    "format": "number"
                  },
                  "comment_count": {
                    "label": "Comments",
                    "format": "number"
                  },
                  "duration_seconds": {
                    "label": "Duration (s)",
                    "format": "number"
                  },
                  "searched_hashtag": {
                    "label": "Hashtag",
                    "format": "text"
                  },
                  "snap_url": {
                    "label": "URL",
                    "format": "link"
                  }
                }
              }
            },
            "detailed": {
              "title": "Detailed View",
              "transformation": {
                "fields": [
                  "record_type",
                  "source_type",
                  "rank",
                  "feed_page",
                  "snap_id",
                  "story_id",
                  "composite_story_id",
                  "story_subtype",
                  "snap_url",
                  "video_url",
                  "video_url_unwatermarked",
                  "thumbnail_url",
                  "video_thumbnail_url",
                  "large_thumbnail_url",
                  "embed_url",
                  "duration_seconds",
                  "width",
                  "height",
                  "encoding_format",
                  "creator_username",
                  "creator_display_name",
                  "creator_profile_url",
                  "view_count",
                  "like_count",
                  "share_count",
                  "comment_count",
                  "pending_comment_count",
                  "remix_count",
                  "recommend_count",
                  "rewatch_count",
                  "screenshot_count",
                  "score",
                  "is_featured",
                  "is_creator_suggestion",
                  "description",
                  "caption",
                  "keywords",
                  "hashtags",
                  "sub_titles",
                  "attachment_url",
                  "upload_date",
                  "latest_update_at",
                  "llm_title",
                  "llm_description",
                  "llm_keywords",
                  "s2i_tags",
                  "detected_language",
                  "sound_title",
                  "sound_artist",
                  "sound_thumbnail_url",
                  "searched_hashtag",
                  "hashtag_id",
                  "hashtag_name",
                  "hashtag_url",
                  "hashtag_source",
                  "hashtag_description",
                  "hashtag_video_count",
                  "related_topics",
                  "related_s2i_tags",
                  "related_hashtags",
                  "scraped_at"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "snap_id": {
                    "label": "Snap ID",
                    "format": "text"
                  },
                  "story_id": {
                    "label": "Story ID",
                    "format": "text"
                  },
                  "composite_story_id": {
                    "label": "Composite Story ID",
                    "format": "text"
                  },
                  "story_subtype": {
                    "label": "Story Subtype",
                    "format": "text"
                  },
                  "creator_username": {
                    "label": "Username",
                    "format": "text"
                  },
                  "creator_display_name": {
                    "label": "Display Name",
                    "format": "text"
                  },
                  "creator_profile_url": {
                    "label": "Profile",
                    "format": "link"
                  },
                  "description": {
                    "label": "Description",
                    "format": "text"
                  },
                  "caption": {
                    "label": "Caption",
                    "format": "text"
                  },
                  "keywords": {
                    "label": "Keywords",
                    "format": "text"
                  },
                  "llm_title": {
                    "label": "AI Title",
                    "format": "text"
                  },
                  "llm_description": {
                    "label": "AI Description",
                    "format": "text"
                  },
                  "llm_keywords": {
                    "label": "AI Keywords",
                    "format": "text"
                  },
                  "view_count": {
                    "label": "Views",
                    "format": "number"
                  },
                  "like_count": {
                    "label": "Likes",
                    "format": "number"
                  },
                  "share_count": {
                    "label": "Shares",
                    "format": "number"
                  },
                  "comment_count": {
                    "label": "Comments",
                    "format": "number"
                  },
                  "remix_count": {
                    "label": "Remixes",
                    "format": "number"
                  },
                  "recommend_count": {
                    "label": "Recommends",
                    "format": "number"
                  },
                  "is_featured": {
                    "label": "Featured",
                    "format": "text"
                  },
                  "duration_seconds": {
                    "label": "Duration (s)",
                    "format": "number"
                  },
                  "width": {
                    "label": "Width",
                    "format": "number"
                  },
                  "height": {
                    "label": "Height",
                    "format": "number"
                  },
                  "upload_date": {
                    "label": "Uploaded",
                    "format": "text"
                  },
                  "latest_update_at": {
                    "label": "Last Updated",
                    "format": "text"
                  },
                  "video_url": {
                    "label": "Video URL",
                    "format": "link"
                  },
                  "thumbnail_url": {
                    "label": "Thumbnail",
                    "format": "link"
                  },
                  "related_topics": {
                    "label": "Related Topics",
                    "format": "text"
                  },
                  "related_s2i_tags": {
                    "label": "Related S2I Tags",
                    "format": "text"
                  },
                  "searched_hashtag": {
                    "label": "Hashtag",
                    "format": "text"
                  },
                  "scraped_at": {
                    "label": "Scraped At",
                    "format": "text"
                  },
                  "record_type": {
                    "label": "Record Type",
                    "format": "text"
                  },
                  "source_type": {
                    "label": "Source",
                    "format": "text"
                  },
                  "rank": {
                    "label": "Rank",
                    "format": "number"
                  },
                  "feed_page": {
                    "label": "Feed Page",
                    "format": "number"
                  },
                  "snap_url": {
                    "label": "URL",
                    "format": "link"
                  },
                  "video_url_unwatermarked": {
                    "label": "Video URL (Unwatermarked)",
                    "format": "link"
                  },
                  "video_thumbnail_url": {
                    "label": "Video Thumbnail",
                    "format": "link"
                  },
                  "large_thumbnail_url": {
                    "label": "Large Thumbnail",
                    "format": "link"
                  },
                  "embed_url": {
                    "label": "Embed URL",
                    "format": "link"
                  },
                  "encoding_format": {
                    "label": "Format",
                    "format": "text"
                  },
                  "pending_comment_count": {
                    "label": "Pending Comments",
                    "format": "number"
                  },
                  "rewatch_count": {
                    "label": "Rewatches",
                    "format": "number"
                  },
                  "screenshot_count": {
                    "label": "Screenshots",
                    "format": "number"
                  },
                  "score": {
                    "label": "Score",
                    "format": "number"
                  },
                  "is_creator_suggestion": {
                    "label": "Creator Suggestion",
                    "format": "text"
                  },
                  "hashtags": {
                    "label": "Hashtags",
                    "format": "text"
                  },
                  "sub_titles": {
                    "label": "Subtitles",
                    "format": "text"
                  },
                  "attachment_url": {
                    "label": "Attachment",
                    "format": "text"
                  },
                  "s2i_tags": {
                    "label": "S2I Tags",
                    "format": "text"
                  },
                  "detected_language": {
                    "label": "Language",
                    "format": "text"
                  },
                  "sound_title": {
                    "label": "Sound",
                    "format": "text"
                  },
                  "sound_artist": {
                    "label": "Sound Artist",
                    "format": "text"
                  },
                  "sound_thumbnail_url": {
                    "label": "Sound Artwork",
                    "format": "link"
                  },
                  "hashtag_id": {
                    "label": "Hashtag ID",
                    "format": "text"
                  },
                  "hashtag_name": {
                    "label": "Hashtag Name",
                    "format": "text"
                  },
                  "hashtag_url": {
                    "label": "Hashtag URL",
                    "format": "link"
                  },
                  "hashtag_source": {
                    "label": "Hashtag Source",
                    "format": "text"
                  },
                  "hashtag_description": {
                    "label": "Hashtag Description",
                    "format": "text"
                  },
                  "hashtag_video_count": {
                    "label": "Hashtag Videos",
                    "format": "number"
                  },
                  "related_hashtags": {
                    "label": "Related Hashtags",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      },
      "defaultMemoryMbytes": 1024,
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 300,
        "memoryMbytes": 1024
      }
    },
    "buildNumber": "1.0.2",
    "imageDigest": "8478686ed93136f2637e8bb298862b5008c07f72f2827ad4ff84cbc629eddd33",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.00991
    }
  }
}