---
title: "Browse the public Substack Explore surface"
method: GET
path: "/substack/explore"
tags: ["Substack"]
---

# Browse the public Substack Explore surface

`GET /substack/explore`

## Request

- Base URL: `https://api.crawlora.net/api/v1`
- URL: `https://api.crawlora.net/api/v1/substack/explore`
- Auth: API key in header `x-api-key`

Returns one page of Substack's Explore surface. Explore is a feed of heterogeneous modules rather than a flat list, so each page returns the modules it contains and every module names its own type. Known module types are `trendingTopicsExplore` (trending topics and suggested searches), `trendingPostsExplore`, `newBestsellersExplore`, `videoSuggestionsExplore`, `categoryLeaderboard`, `comment` (a single Note) and `post` (a single post). Only the collections a module actually carries are populated. Pagination is cursor-based; early pages are curated shelves and later pages are individual Notes and posts.

## Query parameters

- `tab` string
- `type` 'base' | 'secondary' | 'category'
- `cursor` string

## Headers

- `x-api-key` string, required

## Response `200`

OK

- SubstackExploreResponseDoc
  - `code` integer
  - `data` SubstackExploreResult
    - `has_more` boolean
    - `modules` SubstackExploreModule[]
      - `category_id` string
      - `category_name` string
      - `notes` SubstackNote[]
        - `attached_post` SubstackNotePost
          - `id` integer
          - `title` string
          - `url` string
        - `author_bestseller_tier` integer
        - `author_handle` string
        - `author_id` integer
        - `author_name` string
        - `author_photo_url` string
        - `author_url` string
        - `body` string
        - `edited_at` string
        - `id` integer
        - `is_ai_generated` boolean
        - `language` string
        - `published_at` string
        - `reaction_count` integer
        - `reactions` object
        - `reply_count` integer
        - `restack_count` integer
        - `url` string
      - `posts` SubstackPost[]
        - `audience` string
        - `comment_count` integer
        - `cover_image_url` string
        - `description` string
        - `id` integer
        - `paywalled` boolean
        - `published_at` string
        - `reaction_count` integer
        - `slug` string
        - `subtitle` string
        - `title` string
        - `type` string
        - `url` string
      - `profiles` SubstackUser[]
        - `bestseller_tier` integer
        - `bio` string
        - `handle` string
        - `id` integer
        - `name` string
        - `photo_url` string
        - `profile_set_up_at` string
        - `publications` SubstackUserPublication[]
          - `custom_domain` string
          - `id` integer
          - `is_primary` boolean
          - `name` string
          - `role` string
          - `subdomain` string
          - `url` string
        - `slug` string
        - `subscribers` SubstackSubscriberCounts
          - `follower_count` integer
          - `paid_rough` string: PaidRough and PaidRoughInt are the only paid-subscriber figures Substack publishes, and both are buckets rather than counts. PaidRoughInt is the finer of the two and is always present; PaidTier is the coarser threshold behind the public bestseller badge.
          - `paid_rough_int` integer
          - `paid_tier` integer
          - `total` integer
          - `total_display` string
          - `total_hidden` boolean
          - `total_rough` string
        - `subscriptions` SubstackUserSubscription[]
          - `is_founding` boolean
          - `membership_state` string
          - `publication_id` integer
          - `publication_name` string
          - `subdomain` string
        - `url` string
      - `publications` SubstackPublicationListItem[]
        - `author_handle` string
        - `author_id` integer
        - `author_name` string
        - `custom_domain` string
        - `explicit` boolean
        - `hero_text` string
        - `id` integer
        - `language` string
        - `logo_url` string
        - `name` string
        - `payments_enabled` boolean
        - `subdomain` string
        - `subscribers` SubstackSubscriberCounts
          - `follower_count` integer
          - `paid_rough` string: PaidRough and PaidRoughInt are the only paid-subscriber figures Substack publishes, and both are buckets rather than counts. PaidRoughInt is the finer of the two and is always present; PaidTier is the coarser threshold behind the public bestseller badge.
          - `paid_rough_int` integer
          - `paid_tier` integer
          - `total` integer
          - `total_display` string
          - `total_hidden` boolean
          - `total_rough` string
        - `subscription` SubstackSubscription
          - `annual_disabled` boolean
          - `app_store_plans` SubstackAppStorePlan[]
            - `active` boolean
            - `amount_cents` integer
            - `currency` string
            - `display_name` string
            - `display_price` string
            - `is_founding` boolean
            - `period` string
            - `sku` string
          - `founding_benefits` string[]
          - `founding_plan_name` string
          - `free_benefits` string[]
          - `free_trial_enabled` boolean
          - `group_discount_percent` number
          - `monthly_disabled` boolean
          - `paid_benefits` string[]
          - `payments_state` string
          - `plans` SubstackSubscriptionPlan[]
            - `active` boolean
            - `amount_cents` integer
            - `currencies` SubstackPlanCurrency[]
              - …
            - `currency` string
            - `id` string
            - `interval` string
            - `interval_count` integer
            - `kind` string
            - `nickname` string
            - `trial_period_days` integer
          - `pledges_enabled` boolean
        - `url` string
      - `title` string
      - `topics` SubstackExploreTopic[]
        - `alternate_queries` string[]
        - `category` string
        - `description` string
        - `featured` boolean
        - `first_trending_at` string
        - `id` string
        - `query` string
        - `source` string
        - `url` string
      - `type` string: Type is the upstream module kind. Known values: trendingTopicsExplore, trendingPostsExplore, newBestsellersExplore, videoSuggestionsExplore, categoryLeaderboard, comment, post.
    - `next_cursor` string
    - `tab` string
    - `type` string
  - `msg` string

## Other responses

- `400`: Bad Request
- `429`: Too Many Requests
- `503`: Service Unavailable

---

[API](https://skmtc.dev/crawlora/apis/crawlora-api.md) · [All operations](https://skmtc.dev/crawlora/apis/crawlora-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crawlora/apis/crawlora-api/revisions/afac9b012a27?raw)
