# Author schema (/docs/schema/author)



{/*
  AUTO-GENERATED. Do not hand-edit.
  Source: packages/social-api/src/docs/generate-schema-pages.ts
  Regenerate with: pnpm -F @repo/social-api generate:docs
  Field tables derive from the canonical Zod schemas (packages/social-api/src/schemas/canonical.ts);
  availability + equivalence derive from the registry fieldMaps.
  */}

Author schema [#author-schema]

Every SocialCrawl endpoint that returns a author or creator profile gives you this exact shape, whatever the source platform. Write your parser once and the same code reads author data from every platform below. That is the unified schema: one contract instead of a dozen raw upstream formats.

Field reference [#field-reference]

| Field          | Type      | Nullable | Description                                                                                                                                                                                                                                                                                                  |
| -------------- | --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `id`           | `string`  | No       | Platform-specific user ID (always a string; platform-specific prefixes like `did:`, `spotify:artist:`, `t2_` are stripped)                                                                                                                                                                                   |
| `username`     | `string`  | Yes      | User handle or username                                                                                                                                                                                                                                                                                      |
| `display_name` | `string`  | Yes      | Display name or full name                                                                                                                                                                                                                                                                                    |
| `avatar_url`   | `string`  | Yes      | URL to profile picture                                                                                                                                                                                                                                                                                       |
| `bio`          | `string`  | Yes      | Profile biography or description                                                                                                                                                                                                                                                                             |
| `verified`     | `boolean` | Yes      | Whether the account is verified                                                                                                                                                                                                                                                                              |
| `followers`    | `integer` | Yes      | Follower or subscriber count as an integer. Exact on Instagram and on TikTok when the source exposes an unrounded figure. YouTube above 1,000 subscribers is YouTube's published three-significant-figure figure. When the integer is a published/rounded value, `author.ext.followers_approximate` is true. |
| `following`    | `integer` | Yes      | Number of accounts followed                                                                                                                                                                                                                                                                                  |
| `posts_count`  | `integer` | Yes      | Total number of posts / videos / tracks / episodes                                                                                                                                                                                                                                                           |
| `likes_count`  | `integer` | Yes      | Total likes received across the author's content (when surfaced)                                                                                                                                                                                                                                             |
| `url`          | `string`  | Yes      | Direct URL to the profile page                                                                                                                                                                                                                                                                               |
| `location`     | `string`  | Yes      | ISO region code (e.g. `US`) or freeform location string when surfaced                                                                                                                                                                                                                                        |
| `external_url` | `string`  | Yes      | Bio link / external website URL when surfaced by the platform                                                                                                                                                                                                                                                |
| `private`      | `boolean` | Yes      |                                                                                                                                                                                                                                                                                                              |
| `joined_at`    | `string`  | Yes      |                                                                                                                                                                                                                                                                                                              |

Extension fields (`ext`) [#extension-fields-ext]

Platform-specific passthrough. Each field is present only on the platforms that expose it and is absent everywhere else, so treat every `ext.*` field as optional. These carry the richer, per-platform signals the unified leaves cannot hold, and the join keys that chain endpoints together.

| Field                            | Type       | Nullable | Description                                                                                                                                                                                                                                                                          |
| -------------------------------- | ---------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `ext.social_context`             | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.account_created`            | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.country`                    | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.former_usernames`           | `string[]` | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.public_email`               | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.public_phone`               | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.business_category`          | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.hd_avatar_url`              | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.website`                    | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.cover_url`                  | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.page_active`                | `boolean`  | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.employee_count`             | `integer`  | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.employee_count_range.start` | `integer`  | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.employee_count_range.end`   | `integer`  | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.founded_year`               | `integer`  | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.specialities`               | `string[]` | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.industries`                 | `string[]` | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.headquarters`               | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.locations`                  | `string[]` | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.hashtags`                   | `string[]` | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.funding`                    | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.address`                    | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.price_range`                | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.rating`                     | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.rating_count`               | `integer`  | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.talking_about_count`        | `integer`  | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.business_hours`             | `string[]` | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.links`                      | `string[]` | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.ad_library_page_id`         | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.ad_library_status`          | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.urn`                        | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.is_top_voice`               | `boolean`  | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.is_premium`                 | `boolean`  | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.followers_approximate`      | `boolean`  | Yes      | True when `author.followers` is a published or rounded figure rather than an unrounded census: LinkedIn people-list display buckets, TikTok `stats.followerCount` when the exact sibling is absent, and YouTube subscriber counts at or above 1,000. Null or absent on exact counts. |
| `ext.keywords`                   | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.topicCategories`            | `string[]` | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.bannerExternalUrl`          | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.madeForKids`                | `boolean`  | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.hiddenSubscriberCount`      | `boolean`  | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.related_playlists`          | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.topic_ids`                  | `string[]` | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.unsubscribed_trailer`       | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.monthly_listeners`          | `integer`  | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.total_ratings`              | `integer`  | Yes      | Spotify podcasts only: how many listeners have rated the show. Cumulative over the show's whole run, so it reflects longevity as well as size, and it is NOT an audience count (Spotify publishes no play, download, subscriber or follower count for a podcast)                     |
| `ext.average_rating`             | `integer`  | Yes      | Spotify podcasts only: mean listener rating from 0 to 5. Fractional (e.g. 4.66) despite the integer type this schema emits for every numeric leaf                                                                                                                                    |
| `ext.creator_username`           | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.join_policy`                | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.is_nsfw`                    | `boolean`  | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.weekly_active_users`        | `integer`  | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.weekly_contributions`       | `integer`  | Yes      |                                                                                                                                                                                                                                                                                      |
| `ext.bio_link`                   | `string`   | Yes      |                                                                                                                                                                                                                                                                                      |

Platform availability [#platform-availability]

23 platforms return the `Author` shape. `id` are never null on any platform. The fields below vary: **yes** means the platform populates it (the value may still be null); a blank means the platform never provides it, so it is always null.

<div className="overflow-x-auto">
  | Platform     | `following` | `private` | `url` | `joined_at` | `likes_count` | `verified` | `posts_count` | `followers` | `avatar_url` | `location` | `bio` | `external_url` |
  | ------------ | ----------- | --------- | ----- | ----------- | ------------- | ---------- | ------------- | ----------- | ------------ | ---------- | ----- | -------------- |
  | Bluesky      | yes         |           |       | yes         |               |            | yes           | yes         | yes          |            | yes   |                |
  | Facebook     |             | yes       | yes   | yes         | yes           | yes        |               | yes         | yes          | yes        | yes   |                |
  | GitHub       | yes         | yes       | yes   | yes         | yes           | yes        | yes           | yes         | yes          |            | yes   |                |
  | Google       |             |           |       |             |               |            |               |             |              | yes        |       |                |
  | Hacker News  |             |           |       | yes         | yes           |            |               |             |              |            | yes   |                |
  | Instagram    | yes         | yes       | yes   | yes         | yes           | yes        | yes           | yes         | yes          |            | yes   | yes            |
  | Komi         |             |           |       |             |               |            |               |             | yes          |            | yes   | yes            |
  | Kwai         | yes         | yes       | yes   |             | yes           | yes        | yes           | yes         | yes          |            | yes   |                |
  | LinkBio      |             |           |       |             |               |            |               |             |              |            |       | yes            |
  | LinkedIn     | yes         |           | yes   |             |               | yes        |               | yes         |              | yes        | yes   |                |
  | LinkMe       |             |           |       |             |               | yes        | yes           | yes         | yes          |            | yes   |                |
  | Linktree     |             |           |       |             |               |            |               |             | yes          |            | yes   |                |
  | Pillar       |             |           |       |             |               |            |               |             |              | yes        |       |                |
  | Reddit       | yes         | yes       | yes   | yes         | yes           | yes        | yes           | yes         | yes          |            | yes   |                |
  | Snapchat     | yes         | yes       | yes   | yes         |               | yes        | yes           | yes         | yes          |            | yes   |                |
  | Spotify      |             |           |       |             |               |            |               | yes         | yes          |            | yes   |                |
  | Threads      | yes         | yes       | yes   | yes         | yes           | yes        | yes           | yes         | yes          |            | yes   |                |
  | TikTok       | yes         | yes       | yes   | yes         | yes           | yes        | yes           | yes         | yes          | yes        | yes   |                |
  | Trustpilot   |             |           |       |             |               |            | yes           |             |              |            |       | yes            |
  | Truth Social | yes         | yes       | yes   | yes         | yes           | yes        | yes           | yes         | yes          |            | yes   |                |
  | Twitch       | yes         | yes       | yes   | yes         | yes           | yes        | yes           | yes         | yes          |            | yes   |                |
  | Twitter/X    | yes         | yes       | yes   | yes         |               | yes        | yes           | yes         | yes          |            | yes   |                |
  | YouTube      |             |           |       | yes         |               |            | yes           | yes         | yes          |            | yes   |                |
</div>

Machine-readable schema [#machine-readable-schema]

Validate responses programmatically against the JSON Schema (2020-12):

[`/schemas/author.json`](/schemas/author.json)

Point a validator (Ajv, `jsonschema`, or your framework's) at that URL, or hand it to an agent so it can check the shape without a live call.

Returned by [#returned-by]

Endpoints with the `Author` / `AuthorList` archetype return this shape:

[Bluesky](/platforms/bluesky) · [Facebook](/platforms/facebook) · [GitHub](/platforms/github) · [Google](/platforms/google) · [Hacker News](/platforms/hackernews) · [Instagram](/platforms/instagram) · [Komi](/platforms/komi) · [Kwai](/platforms/kwai) · [LinkBio](/platforms/linkbio) · [LinkedIn](/platforms/linkedin) · [LinkMe](/platforms/linkme) · [Linktree](/platforms/linktree) · [Pillar](/platforms/pillar) · [Reddit](/platforms/reddit) · [Snapchat](/platforms/snapchat) · [Spotify](/platforms/spotify) · [Threads](/platforms/threads) · [TikTok](/platforms/tiktok) · [Trustpilot](/platforms/trustpilot) · [Truth Social](/platforms/truthsocial) · [Twitch](/platforms/twitch) · [Twitter/X](/platforms/twitter) · [YouTube](/platforms/youtube)

See how the same fields map to each platform's raw upstream names in the [cross-platform field equivalence table](/docs/schema/field-equivalence).
