# One Country Code, This Week: Social Media Trends API (https://www.socialcrawl.dev/blog/whats-trending-by-country)
> Social media trends API, 30 credits: US breakout post, three sounds, three hashtags, three Google searches. Pinterest, Apple Music, Product Hunt are separate.
A social media trends api call with `country_code=US` returned one breakout TikTok post, three sounds, three hashtags, and three Google searches, and charged 30 credits. Pinterest Trends, Apple Music charts, and Product Hunt each need their own request.
If you are wiring a country check for what's trending on social media, start with that US board and add the other three calls yourself. The board was generated at 2026-10-04T15:49:30.941Z. "This week" is that `generated_at`. The breakout video's `published_at` is 2026-09-21T02:35:06.000Z, thirteen days earlier. The Pinterest rows carry `as_of` 2026-09-30, four days before the pull on 2026-10-04.
The method string on the US board says music charts and Pinterest are not included yet, so the later sections are separate GETs. The JSON below is trimmed from the live bodies, and request ids are left out.
Each social media trends api call in this pull used one API key.
| Call | Country? | Credits | Came back | Is not |
| --- | --- | ---: | --- | --- |
| `GET /v1/prism/trend-board?country_code=US&limit=3` | `country_code` | 30 | 1 post, 3 sounds, 3 hashtags, 3 searches | a time series; ZZ is HTTP 400 and 0 credits |
| `GET /v1/pinterest/trends?country=US&type=growing&limit=3` | `country`, not `country_code` | 10 | 3 growing terms, `as_of` 2026-09-30 | inside the trend board |
| `GET /v1/apple_music/charts?country=us&type=songs&limit=3` | `country=us` | 1 | Top Songs ranks 1-3 | the rest of the chart |
| `GET /v1/producthunt/launches?topic=developer-tools` | no country param | 1 | 50 launches, feed order, first CoreSpeed | a country board, a vote rank; null engagement is not 0 |
## What does one country code return this week?
### The US request and the four counts
`GET /v1/prism/trend-board?country_code=US&limit=3` returned one breakout post, three sounds, three hashtags, and three Google searches, and charged 30 credits. That payload is this call's board, not a stored series. `GET /v1/prism/trend-board` is the country board under [Prism](/docs/prism) composites. Send `Cache-Control: no-cache` when you want this call computed again instead of the 15-minute cache. `period` was not sent. The body has `period_days` 7, `cached` false, and `credits_used` 30. Client curl `time_total` was 21.0 seconds. The response body has no latency field, so that number stays a client measurement.
```bash
curl -sS \
-H "x-api-key: $SOCIALCRAWL_API_KEY" \
-H "Cache-Control: no-cache" \
"https://www.socialcrawl.dev/v1/prism/trend-board?country_code=US&limit=3"
```
```json
{
"data": {
"country": "US",
"period_days": 7,
"generated_at": "2026-10-04T15:49:30.941Z",
"unavailable": [],
"counts": {
"feed_rows": 24,
"feed_rows_in_country": 23,
"too_young": 6,
"creators_checked": 5,
"creators_skipped": 4,
"below_cut": 0,
"sounds_checked": 3
}
},
"credits_used": 30,
"cached": false
}
```
The arrays on that body hold 1 breakout post, 3 sounds, 3 hashtags, and 3 searches. `unavailable` is an empty array. `limit=3` filled sounds, hashtags, and searches. Breakout stopped at one row, under the cap. `creators_skipped_by_reason` records all four skips as `too_few_author_posts`.
Every source on the payload is `ok: true`. `local_feed` returned 24 rows, `hashtag_board` 3, `google_trending` 3. `creator_pages` returned 50 rows across 5 calls and 0 failures. `sound_videos` returned 38 rows across 3 calls and 0 failures. `sound_details` returned 3 rows across 3 calls and 0 failures.
The [TikTok developer welcome](https://developers.tiktok.com/docs/en/welcome) pages that rank for a tiktok trends api query describe login, sharing, and content posting. This board also carries three Google searches. The method string says the post list is TikTok's local For You feed for a phone in the US, the hashtags are TikTok's trending-hashtag board for the US over the last 7 days, and the searches are Google Trends Trending Now for the US over the last 7 days, which that string calls the longest window Google publishes.
### One breakout post, and it has no title
The only breakout row is `@natstardiaries`.
```json
{
"author": "natstardiaries",
"url": "https://www.tiktok.com/@natstardiaries/video/7687811465029471519",
"region": "US",
"views": 4634696,
"published_at": "2026-09-21T02:35:06.000Z",
"vs_creator": 3315.23,
"author_median_views": 1398,
"author_posts_compared": 9
}
```
The method string on this response defines a breakout as views at least 3 times the median of that author's other posts. Pinned posts and posts under 48 hours are left out, and at least 8 posts are compared. Dividing 4,634,696 by 1,398 gives 3,315.23, which is `vs_creator`. Nine posts were compared, and 2026-09-21 is older than 48 hours, so this row clears the rule the same string states. The object has no title, caption, likes, or comments. A tiktok trends blurb would need a caption. `engagement_rate` is not on the row.
`creators_checked` is 5. Four creators were skipped for too few posts, six feed rows were `too_young`, and `below_cut` is 0. The breakout list is only the authors this call read. `feed_rows_in_country` is 23 out of 24 feed rows.
### Two of the three sounds are established
The section key is `rising_sounds`. longslyrics and iqbalhasanjewel are `established`, and orby143 is `new`.
| title | status | uses_on_feed | total_videos | feed_views | recent_videos (3-day window) | recent_share |
| --- | --- | ---: | ---: | ---: | ---: | ---: |
| original sound - longslyrics | established | 1 | 13180 | 33472953 | 0 | 0 |
| original sound - iqbalhasanjewel | established | 1 | 21223 | 19500847 | 0 | 0 |
| original sound - orby143 | new | 1 | 3438 | 6289221 | 1 | 0.08 |
`artist` is null on all three. `uses_on_feed` is 1 on each. The method string dates the first page of videos for each sound and counts how many fall in the last 3 days. Only "original sound - orby143" has `recent_videos` 1 and `recent_share` 0.08. The other two are 0 on both fields.
### Hashtags in the default 7-day window
Hashtag growth, in the method string, compares the last third of TikTok's daily popularity curve with the first third. These three tags are the trending hashtags block for the default 7-day window on this body. All three are `rising: true`, `from_zero: false`, `censored: false`, with `first_seen_in_window.date` of 2026-09-27 and `curve_points` 7.
| rank | tag | posts | window_views | growth_ratio | rising | first_seen_in_window |
| ---: | --- | ---: | ---: | ---: | --- | --- |
| 1 | reggie | 71821 | 789016635 | 3.14 | true | 2026-09-27 |
| 2 | cornell | 47323 | 559097435 | 6.69 | true | 2026-09-27 |
| 3 | cornelluniversity | 47030 | 424137221 | 7.07 | true | 2026-09-27 |
Those seven curve points live inside this payload, and the next call does not diff them. `window_views` here and `search_volume` on the search rows are different units, so do not add those two fields together.
### Three US searches from Trending Now
A trending topics api lookup, on this route, is three Google Trends Trending Now rows for the US. The method string says each row's first-seen time is Google's own start time.
| rank | title | search_volume | increase_percent | started_at | active | categories |
| ---: | --- | ---: | ---: | --- | --- | --- |
| 1 | wnba playoffs | 5000000 | 1000 | 2026-09-29T12:10:00.000Z | true | sports |
| 2 | christa pike | 5000000 | 1000 | 2026-09-28T23:00:00.000Z | true | law_and_government |
| 3 | colts vs commanders | 500000 | 1000 | 2026-10-04T03:10:00.000Z | true | sports |
`ended_at` is null on all three. `increase_percent` is 1000 on every row, as returned and not rescaled. Rank 3 started the morning of the pull, at a tenth of the volume on the first two rows, with the same `increase_percent`.
[Google's Trending now help](https://support.google.com/trends/answer/3076011?hl=en) lists windows of 4 hours, 24 hours, 48 hours, and 7 days. This board's search block is the 7-day window the method string describes. For a Google Trends client on its own, use [an earlier Google Trends write-up](/blog/google-trends-api). Vendor pricing is in [Best Google Trends APIs (2026)](/blog/best-google-trends-apis-2026), not on this board.
### No history between calls, and ZZ returns HTTP 400
The method string says nothing is stored between calls and no history is kept, so this is today's board, and a repeat within 15 minutes is served from cache. This run did not call the US board twice, so there is no cache-hit body to show. The same string says no language model is used. `policy_version` on the US body is `n22-2026-09-23`.
`country_code=ZZ` is the refusal check. It returned HTTP 400, `credits_used` 0, `error.type` `INVALID_REQUEST`, and `retryable` false. Client curl `time_total` was 0.34 seconds. HTTP 400 with `credits_used` 0 means the code was rejected before a board was built.
```bash
curl -sS \
-H "x-api-key: $SOCIALCRAWL_API_KEY" \
-H "Cache-Control: no-cache" \
"https://www.socialcrawl.dev/v1/prism/trend-board?country_code=ZZ"
```
```json
{
"success": false,
"error": {
"type": "INVALID_REQUEST",
"message": "Google Trends publishes no Trending Now list for ZZ, so there is no board for it. Pass one of the 125 countries Google Trends covers, such as DE, US, GB or KR.",
"status": 400,
"doc_url": "https://www.socialcrawl.dev/docs/errors#invalid-request",
"retryable": false
},
"credits_used": 0
}
```
The error string says 125 countries. [Google's help](https://support.google.com/trends/answer/3076011?hl=en) says Trending now covers 100+ countries and regions. No second real country was called.
## What do Pinterest Trends return for that country?
The country is still the US, on a parameter named `country`. These Pinterest Trends rows are dated 2026-09-30, while the trend board's `generated_at` is 2026-10-04. A longer look at retrieval options is in [Pinterest data APIs](/blog/best-pinterest-data-apis-2026). This pull proved `country=US` and `type=growing` with `limit=3`. The endpoint note also names `seasonal`, `top_monthly`, and `top_yearly`. This pull did not request those types, and it sent no other country. The call charged 10 credits, with `cached` false, `total` 3, `dropped` 0, and `pagination.has_more` false.
```bash
curl -sS \
-H "x-api-key: $SOCIALCRAWL_API_KEY" \
-H "Cache-Control: no-cache" \
"https://www.socialcrawl.dev/v1/pinterest/trends?country=US&type=growing&limit=3"
```
| rank | term | search_index | weekly_change | monthly_change | yearly_change | seasonality | as_of |
| ---: | --- | ---: | ---: | ---: | ---: | ---: | --- |
| 1 | bryan hodukavich | 100 | 1 | 100.01 | 100.01 | 0.32447916 | 2026-09-30 |
| 2 | resident evil bryan | 58 | 0.5 | 100.01 | 100.01 | 0.32244167 | 2026-09-30 |
| 3 | lord verity | 55 | -0.1 | 100.01 | 100.01 | 0.3187373 | 2026-09-30 |
`country` and `market` are `US` on every row. `as_of` is 2026-09-30 on every row. The pull is 2026-10-04 UTC, so the table is four days behind the request, not current to the minute.
The change fields are fractions on the wire. The endpoint note reads 0.3 as +30% and 100.01 as a term that was near zero before. The table prints the values as returned, including weekly changes of 1, 0.5, and -0.1.
`search_index` 100 is the top of these three rows. `limit=3` did not return a longer list. Three different 0 to 100 scales show up around this number. [Google Explore](https://support.google.com/trends/answer/4365533?hl=en-AU) divides a sample by total searches and scales the result from 0 to 100. [Pinterest's own plot](https://help.pinterest.com/en/business/article/pinterest-trends) sets the high point of a term to 100 and the low point to 0. This `search_index` is a third field, on a three-row `growing` answer.
The [official Trends docs](https://developers.pinterest.com/docs/analytics-and-reports/trends/) put the region in the path, can include a weekly series inside today's response, and say callers cannot retrieve trends for past dates. This body has three terms and no weekly series.
## How do you pull Apple Music charts for a country?
An apple music charts api request uses `country=us` in lowercase and `type=songs`. The response `country_code` is `US`, `chart` is `songs`, and `post.ext.trend.chart_title` is `Top Songs`. `updated_at` is 2026-10-04T15:49:48.000Z on all three rows. The call charged 1 credit, with `cached` false and `total` 3. Client curl `time_total` was 18.2 seconds. `limit=3` is the whole chart this pull captured, so ranks past 3 are not in the body.
```bash
curl -sS \
-H "x-api-key: $SOCIALCRAWL_API_KEY" \
-H "Cache-Control: no-cache" \
"https://www.socialcrawl.dev/v1/apple_music/charts?country=us&type=songs&limit=3"
```
| rank | title | artist (`author.username`) | published_at |
| ---: | --- | --- | --- |
| 1 | Solar Eclipse | Drake & Don Toliver | 2026-10-02T00:00:00.000Z |
| 2 | Quebec | Drake | 2026-10-02T00:00:00.000Z |
| 3 | Cold Shoulder | Drake, Don Toliver & Yebba | 2026-10-02T00:00:00.000Z |
Rank 1 links to `https://music.apple.com/us/album/solar-eclipse/6818209777?i=6818209989`. All three share the release date 2026-10-02. `published_at` is midnight UTC on that date. This pull has no play counts. On these rows `computed.engagement_rate` and `computed.estimated_reach` are null. `content_category` is `other` on rank 1, null on rank 2, and `other` on rank 3.
These rows use the unified schema. The song title is `content.text`, the artist string is `author.username`, and the chart metadata sits on `ext.trend`. [Apple Music Feed](https://developer.apple.com/documentation/applemusicfeed) is bulk catalog access. This response is a country chart, and the trend-board method string already left music charts off that board. The endpoint note also lists `albums`, `music-videos`, and `playlists`. This apple music charts api call did not request them, so there is no sample for those types here.
## What does Product Hunt return if you skip the country?
This call has no `country` and no `country_code`. `topic=developer-tools` is a slug. It charged 1 credit, with `cached` false. `total` is 50, `dropped` is 0, `page_size` is 50, `has_more` is false, and `next_cursor` is null. The `data` object has keys `items`, `total`, and `dropped` only.
```bash
curl -sS \
-H "x-api-key: $SOCIALCRAWL_API_KEY" \
-H "Cache-Control: no-cache" \
"https://www.socialcrawl.dev/v1/producthunt/launches?topic=developer-tools"
```
Order is array order. Position 1 is CoreSpeed, maker Justin Jincaid, `published_at` 2026-09-24T08:34:40.000Z, tagline "One MCP for everything your agents need: apps, memory, tools", at `https://www.producthunt.com/products/corespeed`. `published_at` is when the post was created. `ext.updated_at` on that row is `2026-10-04T08:47:54-07:00`. `computed.language` on that row is `en`, and `content_category` is `other`.
```json
{
"post": {
"url": "https://www.producthunt.com/products/corespeed",
"content": {
"text": "One MCP for everything your agents need: apps, memory, tools"
},
"author": { "display_name": "Justin Jincaid" },
"engagement": {
"views": null,
"likes": null,
"comments": null,
"shares": null,
"saves": null
},
"published_at": "2026-09-24T08:34:40.000Z",
"ext": {
"title": "CoreSpeed",
"updated_at": "2026-10-04T08:47:54-07:00"
}
}
}
```
The next rows, still in feed order, are opensend.cc (Kamal Panara), DocsAlot MCP Connector (Haya Jawed), Sente (Yuki Hamada), and Octri.dev (fmerian). The other 45 titles stay in the raw response.
On all 50 items, `engagement.views`, `likes`, `comments`, `shares`, and `saves` are null. Zero items have a non-null engagement value. The keys `rank`, `website`, `votes`, and `vote_count` are absent. A null engagement field is an absent measurement. Store it as missing, and leave the list in feed order. One raw TikTok trend item in the wild prints `user_count: 0` with no note on whether that zero was measured ([novi/tiktok-trend-api](https://apify.com/novi/tiktok-trend-api)). This payload leaves engagement null and omits votes, rank, and website. Product Hunt's own docs state both [450 and 900 requests per 15 minutes](https://api.producthunt.com/v2/docs/rate_limits/headers). This pull does not measure that quota.
## How do you make the first call?
1. Create a key for the SocialCrawl API at [signup](/auth/register). The pull did not record a free-credit grant.
2. The first social media trends api call is the US trend-board curl in the first section. Send `Cache-Control: no-cache` when you need a fresh board rather than the 15-minute cache.
3. Then request `/v1/pinterest/trends?country=US&type=growing&limit=3`, `/v1/apple_music/charts?country=us&type=songs&limit=3`, and `/v1/producthunt/launches?topic=developer-tools`. The ZZ trend-board call is the refusal check. Those five bodies charged 30, 0, 10, 1, and 1 credits. The sum is 42. Price the set from those `credits_used` fields. `credits_remaining` on the responses is not a ledger, because the calls overlapped other traffic.
4. Use the [explorer](/explorer) to see your data before writing a single line, and the [API reference](/docs/api-reference) for the four paths above.
## Frequently asked questions
### What does one country code return from a social media trends API?
On 2026-10-04, `country_code=US` with `limit=3` charged 30 credits and returned `cached: false`. The body held one breakout post, three sounds, three hashtags, and three Google searches. `unavailable` was an empty array. Pinterest, Apple Music, and Product Hunt each need their own request. They are absent from that body.
### Does the trend board keep a history between calls?
No. The method string says nothing is stored between calls and no history is kept, so the payload is today's board, and a repeat within 15 minutes is served from cache. This run did not repeat the US call, so there is no cache-hit body to show. The seven hashtag `curve_points` sit inside this one payload. A later call does not diff them for you.
### What does the period parameter change?
This call did not send `period`. The response `period_days` is 7. The method string describes the hashtag board and Google Trending Now as the last 7 days on this body. The endpoint note says `period` only changes the TikTok hashtag window, and that there is no `days` parameter. This pull did not send `period=30`, so that body is not shown.
### Do Pinterest Trends and Apple Music charts take a country?
Yes. The parameter name on both is `country`. This pull sent `US` for Pinterest and `us` for Apple Music. Pinterest `as_of` was 2026-09-30. Apple Music returned Top Songs ranks 1 through 3 for 1 credit. ZZ was tested on the trend board only, not on these two calls.
### Does Product Hunt filter launches by country?
No. `topic=developer-tools` returned 50 launches in feed order, for 1 credit. Views, likes, comments, shares, and saves are null on all 50 items. The keys `rank`, `website`, `votes`, and `vote_count` are absent. There is no country parameter on this request.
The US curl is in the first section. Run it in the [explorer](/explorer), or read the four paths in the [API reference](/docs/api-reference). Google searches as their own client are covered in [an earlier Google Trends write-up](/blog/google-trends-api). The Pinterest retrieval write-up is [Pinterest data APIs](/blog/best-pinterest-data-apis-2026).