{
  "data": {
    "id": "3sKUgGzwHh7pmr4rb",
    "actId": "37uAX6CIbieDZhXKL",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-11-07T08:56:03.675Z",
    "finishedAt": "2026-11-07T08:56:07.405Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 3646,
      "runTimeSecs": 3.646,
      "computeUnits": 0.004051111111111111,
      "imageSizeBytes": 318990336
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Snapchat Explore Search Input\",\n  \"description\": \"Search public Snapchat Explore results by keyword. Choose one result family or collect everything Snapchat returns. No login or proxy setup is required.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"queries\": {\n      \"type\": \"array\",\n      \"title\": \"Search queries\",\n      \"description\": \"One or more public Snapchat Explore keywords, e.g. food, travel, selenagomez. Legacy keywords, query, searchQueries and searchTerms inputs are still accepted in code.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"prefill\": [\n        \"food\"\n      ]\n    },\n    \"mode\": {\n      \"type\": \"string\",\n      \"title\": \"What to collect\",\n      \"description\": \"Result family to return. 'Users' includes both Snapchat user cards and public profiles; 'Profiles' returns public profiles only.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"all\",\n        \"spotlight\",\n        \"lenses\",\n        \"users\",\n        \"profiles\",\n        \"episodes\",\n        \"publishers\",\n        \"topics\",\n        \"places\"\n      ],\n      \"enumTitles\": [\n        \"All result types\",\n        \"Spotlight videos\",\n        \"AR lenses\",\n        \"Users and public profiles\",\n        \"Public profiles\",\n        \"Show episodes\",\n        \"Shows and publishers\",\n        \"Related topics\",\n        \"Places\"\n      ],\n      \"default\": \"all\",\n      \"prefill\": \"all\"\n    },\n    \"maxResultsPerQuery\": {\n      \"type\": \"integer\",\n      \"title\": \"Results per query\",\n      \"description\": \"Records returned for each query in the selected page window. Legacy maxResults and maxItems inputs are still accepted in code.\",\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"default\": 100,\n      \"prefill\": 3\n    },\n    \"page\": {\n      \"type\": \"integer\",\n      \"title\": \"Result page\",\n      \"description\": \"Snapchat exposes one fixed result set per query with no cursor. Page 1 returns the first maxResultsPerQuery records, page 2 the next batch, and so on. Legacy startPage is still accepted in code.\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"default\": 1,\n      \"prefill\": 1\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy configuration\",\n      \"type\": \"object\",\n      \"description\": \"Optional proxy override. Direct access works by default; no proxy is required.\",\n      \"editor\": \"proxy\",\n      \"nullable\": true\n    }\n  },\n  \"required\": []\n}",
    "readme": "# Snapchat Explore Search Across Spotlight, Lenses & Places\n\nSearch public Snapchat Explore results by keyword and export the whole result page as structured rows: Spotlight videos with engagement counts, AR lenses, user cards, public profiles, show episodes, publishers, places, and related topics. No Snapchat account, cookies, or browser install is needed.\n\nSnapchat's Explore page is server-rendered. The actor reads that public page directly, decodes the embedded result payload, and emits one record per card with a canonical Snapchat link.\n\n## What You Get\n\n- **Spotlight videos** with creator, title, AI summary, keywords, views, likes, comments, shares, preview media, and thumbnail\n- **AR lenses** with name, creator, official-creator flag, icon, preview image, unlock link, and canonical lens URL\n- **Users** from the \"Add Friends\" card with username, display name, verification, story flag, avatar, and profile link\n- **Public profiles** with handle, title, subtitle, description, logo, hero image, verification, story flag, and follower count\n- **Show episodes** with title, publish date, thumbnail, publisher name/logo, and episode link\n- **Publishers and Shows** with description, logo, follower count, and page link\n- **Places** with address, category image, and place page link\n- **Related topics** from the page's topic pills, with links to their topic hubs\n- Every row carries `query`, `resultType`, `rank`, `scrapedAt`, and `href`\n\n## Input\n\n| Field | Type | Required | Default | Description |\n|-------|------|----------|---------|-------------|\n| `queries` | string[] | Yes | — | Search keywords (e.g. `food`, `new york`, `selenagomez`). Legacy `keywords`, `query`, `searchQueries` and `searchTerms` inputs are still read in code. |\n| `mode` | string | No | `all` | Result family: `all`, `spotlight`, `lenses`, `users`, `profiles`, `episodes`, `publishers`, `topics`, or `places`. `users` returns both user cards and public profiles. Legacy `resultTypes` is still read in code. |\n| `maxResultsPerQuery` | integer | No | `100` | Records returned per query in the selected page window (1–500). Legacy `maxResults` and `maxItems` are still read in code. |\n| `page` | integer | No | `1` | Page of the query's fixed result set to return (1–100). Legacy `startPage` is still read in code. |\n| `proxyConfiguration` | object | No | — | Optional proxy override. Direct requests work by default. |\n\n### Example Input\n\n```json\n{\n  \"queries\": [\"tbilisi\", \"food\"],\n  \"mode\": \"spotlight\",\n  \"maxResultsPerQuery\": 20,\n  \"page\": 1\n}\n```\n\n### Legacy Input\n\nSaved tasks that use the old fields keep working. The actor maps them in code, not in the visible schema:\n\n```json\n{\n  \"keywords\": [\"food\", \"travel\"],\n  \"resultTypes\": [\"spotlight\", \"lens\", \"topic\", \"user\"],\n  \"maxResultsPerQuery\": 50,\n  \"includeSpotlightDetails\": true\n}\n```\n\n`includeSpotlightDetails` is no longer needed because the current page already carries preview media and engagement counts; when it is supplied the actor logs that it was ignored.\n\n## Output\n\nEvery record starts with the common fields below. Type-specific fields are added beside them and empty values are omitted.\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `query` | string | Search keyword that produced this row |\n| `resultType` | string | `spotlight`, `lens`, `topic`, `user`, `snapProEntity`, `publisherEdition`, `publisher`, or `place` |\n| `rank` | integer | Position in the query's sorted result set (1-based) |\n| `scrapedAt` | string | ISO 8601 UTC scrape timestamp |\n| `href` | string | Canonical Snapchat URL for the card |\n\n### Spotlight fields\n\n`storyId`, `rawSnapId`, `thumbnailUrl`, `mediaUrl`, `videoPreviewUrl`, `creatorUsername`, `creatorDisplayName`, `teaserText`, `rawCaption`, `title`, `description`, `keywords`, `viewCount`, `likeCount`, `commentCount`, `shareCount`, `gradientFrom`, `gradientTo`, plus the legacy `snapTitle`, `snapDescription`, `caption`, `postedAt`, `durationSeconds`, `width`, `height`, `boltVideoUrl`, `flatVideoUrl` when an older page supplies them.\n\n### Lens fields\n\n`lensId`, `lensName`, `creatorName`, `creatorIsOfficial`, `iconUrl`, `thumbnailUrl`, `deeplinkUrl`, `unlockUrl`, and the legacy `thumbnailSequence` when present.\n\n### User fields\n\n`userId`, `username`, `displayName`, `contextHint`, `profileLogoUrl`, `isOfficial`, `hasStory`, and the legacy `snapProId`, `isPopular`, `emoji` when present.\n\n### Public profile fields (`snapProEntity`)\n\n`id`, `username`, `title`, `displayName`, `subtitle`, `description`, `logoUrl`, `profileLogoUrl`, `heroImageUrl`, `isOfficial`, `isOfficialAccount`, `hasStory`, `hostAccountUsername`, `followerCount`, `subscriberCount`, and the legacy contact fields (`phoneNumber`, `address`, `emailAddress`, `whatsappNumber`, `websiteUrl`, `category`, `tier`, and so on) when an older page supplies them.\n\n### Episode, publisher and place fields\n\n- `publisherEdition`: `editionId`, `title`, `publishedAt`, `thumbnailUrl`, `deeplinkUrl`, `publisherName`, `publisherImageUrl`, `publisherHref`, `publisher`, plus legacy `storyDocId`.\n- `publisher`: `publisherId`, `displayName`, `title`, `description`, `iconUrl`, `deeplinkUrl`, `followerCount`, `approxSubscriptionCount`, `subscriberCount`, plus legacy `isShow`, `showId`, `latestEditionId`, `businessProfileId`, `primaryColor`.\n- `place`: `placeId`, `displayName`, `title`, `address`, `imageUrl`, `imageIsIcon`, plus legacy `locality`, `centerLat`, `centerLng`, `categoryName`, `categoryIconUrl`, `favoriteCount`, `isFavorited`, `boundingBox`, `storyPreview`.\n\n### Example Output\n\n```json\n{\n  \"query\": \"food\",\n  \"resultType\": \"spotlight\",\n  \"rank\": 1,\n  \"scrapedAt\": \"2026-11-07T06:59:37.000000+00:00\",\n  \"href\": \"https://www.snapchat.com/@foodasmr3/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYZnV3bm5oeGVlAZ84zAenAZ84y_B7AAAAAQ\",\n  \"storyId\": \"W7_EDlXWTBiXAEEniNoMPwAAYZnV3bm5oeGVlAZ84zAenAZ84y_B7AAAAAQ\",\n  \"rawSnapId\": \"W7_EDlXWTBiXAEEniNoMPwAAYZnV3bm5oeGVlAZ84zAenAZ84y_B7AAAAAQ\",\n  \"creatorUsername\": \"foodasmr3\",\n  \"creatorDisplayName\": \"FOOD\",\n  \"title\": \"Mukbang Magic: Spicy Ramen & Dumplings Feast!\",\n  \"description\": \"Get ready for a mouthwatering mukbang experience...\",\n  \"keywords\": [\"how to eat ramen\", \"spicy ramen recipe\", \"ramen bowl\"],\n  \"viewCount\": 68553,\n  \"likeCount\": 5972,\n  \"commentCount\": 83,\n  \"shareCount\": 1530,\n  \"thumbnailUrl\": \"https://cf-st.sc-cdn.net/d/...\",\n  \"videoPreviewUrl\": \"https://cf-st.sc-cdn.net/d/...\",\n  \"mediaUrl\": \"https://cf-st.sc-cdn.net/d/...\",\n  \"gradientFrom\": \"#2b2b35\",\n  \"gradientTo\": \"#16191c\"\n}\n```\n\n## FAQ\n\n**Does this need a Snapchat login or cookies?**\nNo. Explore search is public and the actor reads the server-rendered page without an account.\n\n**How many rows does one query return?**\nSnapchat serves one fixed set per query. In current tests the page carries about 22 Spotlight videos, 24 lenses, 24 profiles, 15 episodes, 14 publishers, 10 places, and one user card. Totals vary by query and locale.\n\n**Can I go past the first page?**\nSnapchat does not expose a page or cursor parameter for Explore search on the web, so there is no second upstream page. The `page` input splits the fixed result set into deterministic windows: page 1 is the first `maxResultsPerQuery` rows, page 2 the next batch. For a different result set, change the query.\n\n**What is the difference between `users` and `profiles`?**\n`users` combines the \"Add Friends\" user cards and the public `profiles` section. `profiles` returns only the public profile cards (`resultType: \"snapProEntity\"`).\n\n**Why are some fields missing on a row?**\nFields that Snapchat does not publish for a card are omitted rather than set to null. Older pages still provide the legacy Spotlight card map and Snap Pro contact fields; those values are kept when present.\n\n**What are the topic rows?**\nThey are the related topic pills rendered beside the results. Each row links to the topic hub and is tagged `resultType: \"topic\"`.\n\n**Can I query several keywords in one run?**\nYes. Add one item per keyword to `queries`; rows from each keyword carry that keyword in the `query` field.\n\n**Is a proxy required?**\nNo. Direct access works. The optional proxy field exists only for users who want to route through their own Apify Proxy settings.\n\n**Is this affiliated with Snapchat?**\nNo. It is an independent tool that reads public Snapchat Explore pages and is not operated or endorsed by Snap Inc.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "snapchat-explore-search-across-spotlight-lenses",
      "title": "Snapchat Explore Search Across Spotlight, Lenses & Places",
      "description": "Search Snapchat Explore by keyword and collect Spotlight videos, AR lenses, users and public profiles, show episodes, publishers and places, with view, like, comment and share counts plus canonical links. No login needed.",
      "version": "1.1",
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 300,
        "memoryMbytes": 1024
      },
      "meta": {
        "templateId": "python-start"
      },
      "input": {
        "title": "Snapchat Explore Search Input",
        "description": "Search public Snapchat Explore results by keyword. Choose one result family or collect everything Snapchat returns. No login or proxy setup is required.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "queries": {
            "type": "array",
            "title": "Search queries",
            "description": "One or more public Snapchat Explore keywords, e.g. food, travel, selenagomez. Legacy keywords, query, searchQueries and searchTerms inputs are still accepted in code.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "prefill": [
              "food"
            ]
          },
          "mode": {
            "type": "string",
            "title": "What to collect",
            "description": "Result family to return. 'Users' includes both Snapchat user cards and public profiles; 'Profiles' returns public profiles only.",
            "editor": "select",
            "enum": [
              "all",
              "spotlight",
              "lenses",
              "users",
              "profiles",
              "episodes",
              "publishers",
              "topics",
              "places"
            ],
            "enumTitles": [
              "All result types",
              "Spotlight videos",
              "AR lenses",
              "Users and public profiles",
              "Public profiles",
              "Show episodes",
              "Shows and publishers",
              "Related topics",
              "Places"
            ],
            "default": "all",
            "prefill": "all"
          },
          "maxResultsPerQuery": {
            "type": "integer",
            "title": "Results per query",
            "description": "Records returned for each query in the selected page window. Legacy maxResults and maxItems inputs are still accepted in code.",
            "minimum": 1,
            "maximum": 500,
            "default": 100,
            "prefill": 3
          },
          "page": {
            "type": "integer",
            "title": "Result page",
            "description": "Snapchat exposes one fixed result set per query with no cursor. Page 1 returns the first maxResultsPerQuery records, page 2 the next batch, and so on. Legacy startPage is still accepted in code.",
            "minimum": 1,
            "maximum": 100,
            "default": 1,
            "prefill": 1
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional proxy override. Direct access works by default; no proxy is required.",
            "editor": "proxy",
            "nullable": true
          }
        },
        "required": []
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Snapchat Explore Search Across Spotlight, Lenses & Users Output",
        "description": "A dataset row per Snapchat Explore search result: Spotlight video, AR lens, related topic, user, public profile, show episode, publisher or place, with engagement counts and canonical links.",
        "properties": {
          "results": {
            "type": "string",
            "title": "Snapchat search results",
            "description": "Dataset containing all scraped Snapchat Explore search results.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "Snapchat Explore search results",
          "fields": {
            "type": "object",
            "properties": {
              "query": {
                "type": "string",
                "description": "Search query that produced this row"
              },
              "resultType": {
                "type": "string",
                "description": "Result family: spotlight, lens, topic, user, snapProEntity, publisherEdition, publisher or place"
              },
              "rank": {
                "type": "integer",
                "description": "1-based position in the query's sorted result set"
              },
              "scrapedAt": {
                "type": "string",
                "description": "ISO 8601 UTC scrape timestamp"
              },
              "href": {
                "type": "string",
                "description": "Canonical Snapchat URL for this result"
              },
              "storyId": {
                "type": "string",
                "description": "Spotlight snap identifier"
              },
              "rawSnapId": {
                "type": "string",
                "description": "Raw Spotlight snap identifier"
              },
              "thumbnailUrl": {
                "type": "string",
                "description": "Thumbnail image URL"
              },
              "mediaUrl": {
                "type": "string",
                "description": "Direct video URL when the page exposes one"
              },
              "videoPreviewUrl": {
                "type": "string",
                "description": "Spotlight video preview URL"
              },
              "creatorUsername": {
                "type": "string",
                "description": "Spotlight creator username"
              },
              "creatorDisplayName": {
                "type": "string",
                "description": "Spotlight creator display name"
              },
              "teaserText": {
                "type": "string",
                "description": "Short Spotlight caption or title"
              },
              "rawCaption": {
                "type": "string",
                "description": "Raw Spotlight caption text"
              },
              "title": {
                "type": "string",
                "description": "Result title (Spotlight, profile, episode, publisher or place)"
              },
              "snapTitle": {
                "type": "string",
                "description": "Legacy Spotlight title field"
              },
              "description": {
                "type": "string",
                "description": "Result description or AI-generated Spotlight summary"
              },
              "snapDescription": {
                "type": "string",
                "description": "Legacy Spotlight description field"
              },
              "caption": {
                "type": "string",
                "description": "Legacy Spotlight caption field"
              },
              "keywords": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "AI keywords attached to a Spotlight video"
              },
              "viewCount": {
                "type": "integer",
                "description": "Spotlight view count"
              },
              "likeCount": {
                "type": "integer",
                "description": "Spotlight like count"
              },
              "commentCount": {
                "type": "integer",
                "description": "Spotlight comment count"
              },
              "shareCount": {
                "type": "integer",
                "description": "Spotlight share count"
              },
              "postedAt": {
                "type": "string",
                "description": "ISO 8601 Spotlight publish timestamp when available"
              },
              "durationSeconds": {
                "type": "number",
                "description": "Spotlight video duration in seconds when available"
              },
              "width": {
                "type": "integer",
                "description": "Spotlight video width in pixels when available"
              },
              "height": {
                "type": "integer",
                "description": "Spotlight video height in pixels when available"
              },
              "boltVideoUrl": {
                "type": "string",
                "description": "Legacy watermarked Spotlight video URL"
              },
              "flatVideoUrl": {
                "type": "string",
                "description": "Legacy unwatermarked Spotlight video URL"
              },
              "gradientFrom": {
                "type": "string",
                "description": "Spotlight card gradient start colour"
              },
              "gradientTo": {
                "type": "string",
                "description": "Spotlight card gradient end colour"
              },
              "lensId": {
                "type": "string",
                "description": "AR lens identifier"
              },
              "lensName": {
                "type": "string",
                "description": "AR lens display name"
              },
              "creatorName": {
                "type": "string",
                "description": "Lens creator name"
              },
              "creatorIsOfficial": {
                "type": "boolean",
                "description": "Whether the lens creator is an official partner"
              },
              "iconUrl": {
                "type": "string",
                "description": "Lens or topic icon URL"
              },
              "deeplinkUrl": {
                "type": "string",
                "description": "Snapchat deep link"
              },
              "unlockUrl": {
                "type": "string",
                "description": "Lens unlock URL"
              },
              "thumbnailSequence": {
                "type": "object",
                "description": "Legacy animated lens thumbnail sequence"
              },
              "topicText": {
                "type": "string",
                "description": "Related topic or hashtag label"
              },
              "topicUrl": {
                "type": "string",
                "description": "Related topic page URL"
              },
              "numSnaps": {
                "type": "integer",
                "description": "Number of snaps in a legacy topic result"
              },
              "topicType": {
                "type": "integer",
                "description": "Legacy topic type code"
              },
              "conversationId": {
                "type": "string",
                "description": "Legacy topic conversation identifier"
              },
              "userId": {
                "type": "string",
                "description": "Snapchat user identifier"
              },
              "username": {
                "type": "string",
                "description": "Snapchat username"
              },
              "displayName": {
                "type": "string",
                "description": "User, profile, publisher or place display name"
              },
              "snapProId": {
                "type": "string",
                "description": "Legacy Snap Pro identifier"
              },
              "profileLogoUrl": {
                "type": "string",
                "description": "User or profile avatar URL"
              },
              "isPopular": {
                "type": "boolean",
                "description": "Whether Snapchat marks the user as popular"
              },
              "isOfficial": {
                "type": "boolean",
                "description": "Whether the user or profile is verified"
              },
              "emoji": {
                "type": "string",
                "description": "Legacy user emoji"
              },
              "contextHint": {
                "type": "string",
                "description": "Legacy user context hint"
              },
              "hasStory": {
                "type": "boolean",
                "description": "Whether the user or profile currently has a public story"
              },
              "id": {
                "type": "string",
                "description": "Public profile identifier"
              },
              "subtitle": {
                "type": "string",
                "description": "Profile or business subtitle"
              },
              "logoUrl": {
                "type": "string",
                "description": "Profile logo URL"
              },
              "heroImageUrl": {
                "type": "string",
                "description": "Profile hero image URL"
              },
              "phoneNumber": {
                "type": "string",
                "description": "Business phone number when the legacy page exposes it"
              },
              "address": {
                "type": "string",
                "description": "Business or place address"
              },
              "country": {
                "type": "string",
                "description": "Business country code when available"
              },
              "emailAddress": {
                "type": "string",
                "description": "Business email address when available"
              },
              "whatsappNumber": {
                "type": "string",
                "description": "Business WhatsApp number when available"
              },
              "websiteUrl": {
                "type": "string",
                "description": "Business website URL when available"
              },
              "profileDeeplinkUrl": {
                "type": "string",
                "description": "Legacy profile deep link"
              },
              "hostAccountUsername": {
                "type": "string",
                "description": "Profile host account username"
              },
              "hostAccountMutableUsername": {
                "type": "string",
                "description": "Mutable host account username"
              },
              "organizationId": {
                "type": "string",
                "description": "Business organization identifier"
              },
              "primaryColorHex": {
                "type": "string",
                "description": "Profile brand colour hex"
              },
              "bitmojiAvatarId": {
                "type": "string",
                "description": "Bitmoji avatar identifier"
              },
              "bitmojiSelfieId": {
                "type": "string",
                "description": "Bitmoji selfie identifier"
              },
              "category": {
                "type": "integer",
                "description": "Business category enum"
              },
              "subcategory": {
                "type": "integer",
                "description": "Business subcategory enum"
              },
              "tier": {
                "type": "integer",
                "description": "Business profile tier"
              },
              "subscriberCount": {
                "type": "integer",
                "description": "Subscriber or follower count"
              },
              "followerCount": {
                "type": "integer",
                "description": "Published follower count"
              },
              "hasLenses": {
                "type": "boolean",
                "description": "Whether the business publishes lenses"
              },
              "isLensCreator": {
                "type": "boolean",
                "description": "Whether the host account is a lens creator"
              },
              "hasHighlights": {
                "type": "boolean",
                "description": "Whether the business publishes highlights"
              },
              "isBrandProfile": {
                "type": "boolean",
                "description": "Whether this is a brand profile"
              },
              "isOfficialAccount": {
                "type": "boolean",
                "description": "Whether this is an official account"
              },
              "isSnapchatPlusSubscriber": {
                "type": "boolean",
                "description": "Whether the host subscribes to Snapchat+"
              },
              "isPartnerProfile": {
                "type": "boolean",
                "description": "Whether this is a partner profile"
              },
              "canDisplayWebsite": {
                "type": "boolean",
                "description": "Whether the profile can display its website"
              },
              "editionId": {
                "type": "string",
                "description": "Show episode identifier"
              },
              "storyDocId": {
                "type": "string",
                "description": "Legacy episode story document identifier"
              },
              "publishedAt": {
                "type": "string",
                "description": "ISO 8601 publish timestamp"
              },
              "publisher": {
                "type": "object",
                "description": "Nested publisher metadata"
              },
              "publisherName": {
                "type": "string",
                "description": "Publisher name for an episode"
              },
              "publisherImageUrl": {
                "type": "string",
                "description": "Publisher image URL for an episode"
              },
              "publisherHref": {
                "type": "string",
                "description": "Publisher page URL for an episode"
              },
              "publisherId": {
                "type": "string",
                "description": "Publisher identifier"
              },
              "businessProfileId": {
                "type": "string",
                "description": "Associated business profile identifier"
              },
              "primaryColor": {
                "type": "string",
                "description": "Publisher brand colour"
              },
              "isShow": {
                "type": "boolean",
                "description": "Whether the publisher is a Snapchat Show"
              },
              "showId": {
                "type": "string",
                "description": "Show identifier"
              },
              "latestEditionId": {
                "type": "string",
                "description": "Latest episode identifier"
              },
              "approxSubscriptionCount": {
                "type": "integer",
                "description": "Approximate publisher subscriber count"
              },
              "placeId": {
                "type": "string",
                "description": "Place identifier"
              },
              "locality": {
                "type": "string",
                "description": "Place locality when the legacy page exposes it"
              },
              "imageUrl": {
                "type": "string",
                "description": "Place or profile image URL"
              },
              "imageIsIcon": {
                "type": "boolean",
                "description": "Whether the place image is a category icon"
              },
              "centerLat": {
                "type": "number",
                "description": "Place centroid latitude"
              },
              "centerLng": {
                "type": "number",
                "description": "Place centroid longitude"
              },
              "categoryName": {
                "type": "string",
                "description": "Place category name"
              },
              "categoryIconUrl": {
                "type": "string",
                "description": "Place category icon URL"
              },
              "isFavorited": {
                "type": "boolean",
                "description": "Legacy place favorite flag"
              },
              "favoriteCount": {
                "type": "integer",
                "description": "Place favorite count"
              },
              "boundingBox": {
                "type": "object",
                "description": "Place bounding box"
              },
              "storyPreview": {
                "type": "object",
                "description": "Place story preview metadata"
              }
            }
          }
        }
      },
      "readme": "# Snapchat Explore Search Across Spotlight, Lenses & Places\n\nSearch public Snapchat Explore results by keyword and export the whole result page as structured rows: Spotlight videos with engagement counts, AR lenses, user cards, public profiles, show episodes, publishers, places, and related topics. No Snapchat account, cookies, or browser install is needed.\n\nSnapchat's Explore page is server-rendered. The actor reads that public page directly, decodes the embedded result payload, and emits one record per card with a canonical Snapchat link.\n\n## What You Get\n\n- **Spotlight videos** with creator, title, AI summary, keywords, views, likes, comments, shares, preview media, and thumbnail\n- **AR lenses** with name, creator, official-creator flag, icon, preview image, unlock link, and canonical lens URL\n- **Users** from the \"Add Friends\" card with username, display name, verification, story flag, avatar, and profile link\n- **Public profiles** with handle, title, subtitle, description, logo, hero image, verification, story flag, and follower count\n- **Show episodes** with title, publish date, thumbnail, publisher name/logo, and episode link\n- **Publishers and Shows** with description, logo, follower count, and page link\n- **Places** with address, category image, and place page link\n- **Related topics** from the page's topic pills, with links to their topic hubs\n- Every row carries `query`, `resultType`, `rank`, `scrapedAt`, and `href`\n\n## Input\n\n| Field | Type | Required | Default | Description |\n|-------|------|----------|---------|-------------|\n| `queries` | string[] | Yes | — | Search keywords (e.g. `food`, `new york`, `selenagomez`). Legacy `keywords`, `query`, `searchQueries` and `searchTerms` inputs are still read in code. |\n| `mode` | string | No | `all` | Result family: `all`, `spotlight`, `lenses`, `users`, `profiles`, `episodes`, `publishers`, `topics`, or `places`. `users` returns both user cards and public profiles. Legacy `resultTypes` is still read in code. |\n| `maxResultsPerQuery` | integer | No | `100` | Records returned per query in the selected page window (1–500). Legacy `maxResults` and `maxItems` are still read in code. |\n| `page` | integer | No | `1` | Page of the query's fixed result set to return (1–100). Legacy `startPage` is still read in code. |\n| `proxyConfiguration` | object | No | — | Optional proxy override. Direct requests work by default. |\n\n### Example Input\n\n```json\n{\n  \"queries\": [\"tbilisi\", \"food\"],\n  \"mode\": \"spotlight\",\n  \"maxResultsPerQuery\": 20,\n  \"page\": 1\n}\n```\n\n### Legacy Input\n\nSaved tasks that use the old fields keep working. The actor maps them in code, not in the visible schema:\n\n```json\n{\n  \"keywords\": [\"food\", \"travel\"],\n  \"resultTypes\": [\"spotlight\", \"lens\", \"topic\", \"user\"],\n  \"maxResultsPerQuery\": 50,\n  \"includeSpotlightDetails\": true\n}\n```\n\n`includeSpotlightDetails` is no longer needed because the current page already carries preview media and engagement counts; when it is supplied the actor logs that it was ignored.\n\n## Output\n\nEvery record starts with the common fields below. Type-specific fields are added beside them and empty values are omitted.\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `query` | string | Search keyword that produced this row |\n| `resultType` | string | `spotlight`, `lens`, `topic`, `user`, `snapProEntity`, `publisherEdition`, `publisher`, or `place` |\n| `rank` | integer | Position in the query's sorted result set (1-based) |\n| `scrapedAt` | string | ISO 8601 UTC scrape timestamp |\n| `href` | string | Canonical Snapchat URL for the card |\n\n### Spotlight fields\n\n`storyId`, `rawSnapId`, `thumbnailUrl`, `mediaUrl`, `videoPreviewUrl`, `creatorUsername`, `creatorDisplayName`, `teaserText`, `rawCaption`, `title`, `description`, `keywords`, `viewCount`, `likeCount`, `commentCount`, `shareCount`, `gradientFrom`, `gradientTo`, plus the legacy `snapTitle`, `snapDescription`, `caption`, `postedAt`, `durationSeconds`, `width`, `height`, `boltVideoUrl`, `flatVideoUrl` when an older page supplies them.\n\n### Lens fields\n\n`lensId`, `lensName`, `creatorName`, `creatorIsOfficial`, `iconUrl`, `thumbnailUrl`, `deeplinkUrl`, `unlockUrl`, and the legacy `thumbnailSequence` when present.\n\n### User fields\n\n`userId`, `username`, `displayName`, `contextHint`, `profileLogoUrl`, `isOfficial`, `hasStory`, and the legacy `snapProId`, `isPopular`, `emoji` when present.\n\n### Public profile fields (`snapProEntity`)\n\n`id`, `username`, `title`, `displayName`, `subtitle`, `description`, `logoUrl`, `profileLogoUrl`, `heroImageUrl`, `isOfficial`, `isOfficialAccount`, `hasStory`, `hostAccountUsername`, `followerCount`, `subscriberCount`, and the legacy contact fields (`phoneNumber`, `address`, `emailAddress`, `whatsappNumber`, `websiteUrl`, `category`, `tier`, and so on) when an older page supplies them.\n\n### Episode, publisher and place fields\n\n- `publisherEdition`: `editionId`, `title`, `publishedAt`, `thumbnailUrl`, `deeplinkUrl`, `publisherName`, `publisherImageUrl`, `publisherHref`, `publisher`, plus legacy `storyDocId`.\n- `publisher`: `publisherId`, `displayName`, `title`, `description`, `iconUrl`, `deeplinkUrl`, `followerCount`, `approxSubscriptionCount`, `subscriberCount`, plus legacy `isShow`, `showId`, `latestEditionId`, `businessProfileId`, `primaryColor`.\n- `place`: `placeId`, `displayName`, `title`, `address`, `imageUrl`, `imageIsIcon`, plus legacy `locality`, `centerLat`, `centerLng`, `categoryName`, `categoryIconUrl`, `favoriteCount`, `isFavorited`, `boundingBox`, `storyPreview`.\n\n### Example Output\n\n```json\n{\n  \"query\": \"food\",\n  \"resultType\": \"spotlight\",\n  \"rank\": 1,\n  \"scrapedAt\": \"2026-11-07T06:59:37.000000+00:00\",\n  \"href\": \"https://www.snapchat.com/@foodasmr3/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYZnV3bm5oeGVlAZ84zAenAZ84y_B7AAAAAQ\",\n  \"storyId\": \"W7_EDlXWTBiXAEEniNoMPwAAYZnV3bm5oeGVlAZ84zAenAZ84y_B7AAAAAQ\",\n  \"rawSnapId\": \"W7_EDlXWTBiXAEEniNoMPwAAYZnV3bm5oeGVlAZ84zAenAZ84y_B7AAAAAQ\",\n  \"creatorUsername\": \"foodasmr3\",\n  \"creatorDisplayName\": \"FOOD\",\n  \"title\": \"Mukbang Magic: Spicy Ramen & Dumplings Feast!\",\n  \"description\": \"Get ready for a mouthwatering mukbang experience...\",\n  \"keywords\": [\"how to eat ramen\", \"spicy ramen recipe\", \"ramen bowl\"],\n  \"viewCount\": 68553,\n  \"likeCount\": 5972,\n  \"commentCount\": 83,\n  \"shareCount\": 1530,\n  \"thumbnailUrl\": \"https://cf-st.sc-cdn.net/d/...\",\n  \"videoPreviewUrl\": \"https://cf-st.sc-cdn.net/d/...\",\n  \"mediaUrl\": \"https://cf-st.sc-cdn.net/d/...\",\n  \"gradientFrom\": \"#2b2b35\",\n  \"gradientTo\": \"#16191c\"\n}\n```\n\n## FAQ\n\n**Does this need a Snapchat login or cookies?**\nNo. Explore search is public and the actor reads the server-rendered page without an account.\n\n**How many rows does one query return?**\nSnapchat serves one fixed set per query. In current tests the page carries about 22 Spotlight videos, 24 lenses, 24 profiles, 15 episodes, 14 publishers, 10 places, and one user card. Totals vary by query and locale.\n\n**Can I go past the first page?**\nSnapchat does not expose a page or cursor parameter for Explore search on the web, so there is no second upstream page. The `page` input splits the fixed result set into deterministic windows: page 1 is the first `maxResultsPerQuery` rows, page 2 the next batch. For a different result set, change the query.\n\n**What is the difference between `users` and `profiles`?**\n`users` combines the \"Add Friends\" user cards and the public `profiles` section. `profiles` returns only the public profile cards (`resultType: \"snapProEntity\"`).\n\n**Why are some fields missing on a row?**\nFields that Snapchat does not publish for a card are omitted rather than set to null. Older pages still provide the legacy Spotlight card map and Snap Pro contact fields; those values are kept when present.\n\n**What are the topic rows?**\nThey are the related topic pills rendered beside the results. Each row links to the topic hub and is tagged `resultType: \"topic\"`.\n\n**Can I query several keywords in one run?**\nYes. Add one item per keyword to `queries`; rows from each keyword carry that keyword in the `query` field.\n\n**Is a proxy required?**\nNo. Direct access works. The optional proxy field exists only for users who want to route through their own Apify Proxy settings.\n\n**Is this affiliated with Snapchat?**\nNo. It is an independent tool that reads public Snapchat Explore pages and is not operated or endorsed by Snap Inc.\n",
      "dockerfile": "../Dockerfile"
    },
    "buildNumber": "1.1.1",
    "imageDigest": "1566a07f2f471dbaa85f58883108e6f62e8baca2cb82739b8c8a9e8c1549f03d",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.004051111111111111
    }
  }
}