100 free credits. No credit card required.Start building
Logo
Back to blog

Analyze Social Media Data With AI

·12 min read

A 1-credit hold comes before a Reddit coffee search runs. Approve the plan, then sort, filter, chart, and export the rows. The dry run used 0 credits.

Analyze Social Media Data With AI

A Reddit search for coffee, with limit 10, holds 1 credit before it fetches a post. On 08/11/2026 that number came from a dry run, GET /v1/reddit/search?query=coffee&limit=10&dry_run=1. The response was HTTP 200. credits_used was 0, and the X-Credits-Used header was 0. On the estimate, hold, expected_min, and expected_max were each 1. The formula string is "Metered: this request holds 1 credit, its lowest price."

That is the API quote for this one list call. The plan card was not opened, and the dev key cannot open /dashboard/build. The card uses the same estimator. When the quote is exact and the minimum equals the maximum, the card says "This plan costs 1 credit." When the expected cost and the maximum differ, it says "About N credits. It will not go above M credits." When the maximum is 0, it says "This plan is free." You approve a paid plan before the fetch. The rows then land in a dataset you can sort, filter, chart, and export.

The job here is public social posts, a price before the paid call, and rows you can work on. The same estimate carries two levers this request left unset. include_body=true raises the hold to 26 credits. label=mention raises the hold to 5 credits. rows_expected is 100, rows_cached is 0, label_credits_min and label_credits_max are 0, and base_credits is 1. The request limit is 10. Do not read 100 as the number of posts this search returns.

The quote assumes a cache miss. A cache hit is free, because the router serves it before billing and holds nothing. A call that fails upstream is refunded in full, so it costs 0. A negotiated rate can pay less than this quote, never more. The dry run stores nothing, so the same idempotency key can go out with the real call.

The call list for a plain-English job, with no fetch, is how to build a social data pipeline. That page is GET /v1/utility/plan. Ask AI runs an approved fetch and returns the rows. Per-call prices sit in social media API pricing, on pricing, and in the credits docs.

What do you need before you ask?

You need an account that can open Ask AI. You need a question about public professional data, or a public link, or a public handle. If the plan is paid, the balance has to cover the maximum the card shows before you approve it.

You can type the question in ordinary words. The curl in the next section reruns the price check with your own key. Approving the card is what starts a paid fetch.

How does the plan card approve a paid fetch?

A paid plan runs after one of three approvals. You click approve on that card. You type a clear yes that is bound to that card. Or the message you already sent states a budget that covers the maximum.

A balance is not a budget. A past charge is not a budget. The words "20 credits", with no ceiling, are not a budget. One stated budget is spent once across the plans of that turn. If the turn has two paid plans, they share that one budget. Each plan does not receive its own copy.

A ceiling that covers the maximum does count. For this Reddit quote the maximum is 1 credit, so a budget of at least 1 credit covers it. The click and the typed yes are the other two paths, and each one is tied to the card in front of you, not to an older plan.

Free calls run at once when the registry prices that call at 0. Utility reads at that price are in the set. A dry run is in the set only when the registry prices that dry run at 0. The card can still print "This plan is free." when the quoted maximum is 0. The registry check does not read that printed zero. A paid run stops before it passes the approved maximum. It does not keep going until the balance is empty.

Send the measured quote like this. dry_run=1 is the switch that keeps it a quote.

bash
curl -H "x-api-key: $SOCIALCRAWL_API_KEY" \
  "https://www.socialcrawl.dev/v1/reddit/search?query=coffee&limit=10&dry_run=1"

$SOCIALCRAWL_API_KEY stands in for your key. The header is x-api-key. Remove dry_run=1 and the same URL is a paid search. On a cache miss the hold is the 1 credit above.

FieldValue on 08/11/2026
HTTP status200
credits_used0
hold1
expected_min1
expected_max1
unitcredits
pricingmetered
base_credits1
cached_likelyfalse
warningsnone

What can you do with the dataset after the fetch?

After an approved paid run, the rows are a dataset. You can sort them and filter them. You can switch to a card view, open a JSON tab, and load more. You can download CSV or JSON. You can turn the rows into a script.

Two caps bound that object. It holds at most 2,000 rows, and at most 5,000,000 bytes. It is kept 30 days. It is owner-only, so another login cannot open it. The rows are public professional data only.

A new chat does not load this dataset.

Sort and filter work on the rows the fetch already returned. Loading more, and turning the rows into a script, use that same dataset. The dry run priced the list call only, so those actions have no second credit figure here.

Which charts can those rows draw?

A chart is drawn from the rows a tool returned. There are 12 kinds: bar, ranked bar, line, area, stacked area, composed, slope, sankey, radial, pie, sparkline, and status. Bar and line are two of the 12. A shape that cannot be drawn honestly is refused. The chart is not filled in with a series the rows do not have.

How are account questions answered?

Account questions stay on your own records. "Credits used this week" and "why did my calls fail" are answered from your request log and your ledger. Those reads are free, and only the account owner can run them. The request log is kept 90 days. The ledger is kept with no 90-day limit, and its totals are net of refunds.

The answer cannot include another account's calls. A balance on the plan card is the balance check for that plan. Approval is still the click, the typed yes, or a budget that covers the maximum. Use the log for the calls and the ledger for the credits. Neither read has a published timing.

The reply stays in the language of the first message that still has letters after links, handles, emails, digits, and punctuation are removed. "Posts about coffee from https://www.reddit.com/r/coffee" still contains "Posts about coffee from", so that language is the one the reply keeps. A message that is only a URL has nothing left once the link is removed, so that message does not choose the language. Digits and punctuation drop out of the same check. An email address drops out too.

Search queries are written in the market's language. A language chosen in an earlier chat is not carried over. There is no memory across chats.

A pasted link or a pasted handle is resolved before the plan is built. The plan then skips the lookup step. You paste the URL or the handle you already have, and the plan starts after that resolve.

How far does comment sentiment go?

Sentiment here is a short read on comments the fetch already returned. The positive and negative split counts every comment read. The counts use the sentiment labels already on those comments. Themes come from a sample of at most 50 comments. That sample is the theme list. It does not cover every comment.

The labels score likes. They do not score downvotes. Sarcasm can be wrong. A line that praises and mocks in the same breath can land in the wrong bucket, and the split will still count it.

The labels on the comment endpoints are covered in comment sentiment analysis. A roundup of scoring tools that start from text you already have is sentiment analysis tools. The split in the chat is the count of labels on the comments it read, plus a theme sample of at most 50.

What will this chat refuse to do?

Some jobs stop before a dataset exists.

  • Custom endpoints are not built. The chat will not add a route for a source it does not already call.
  • X trends are not available from the chat. When you ask, the chat says so.
  • There is no durable background run. A long plan stops and reports a partial result.
  • Cohorts and monitors are not plan steps. A plan will not schedule either one.
  • Report editing is not built. Writing a report from the rows is a separate step, in an AI report from social media data.
  • web/parse cannot run from the chat.
  • Datasets are kept 30 days.
  • Earlier chats are not loaded in. There is no cross-chat memory, by design.
  • The measured quote is one Reddit search. It does not cover every platform.

You get the rows the run finished. The rest is not promised later. If the approved maximum would be crossed, the paid run stops before that point.

What if you want the call list and no fetch?

Use the planner when you want the calls, the parameters, and the hold, and you want none of those calls executed. That walkthrough is how to build a social data pipeline. Open Ask AI when you want the price on a card and, after approval, the rows.

Frequently asked questions

What did the Reddit coffee dry run quote?

On 08/11/2026, GET /v1/reddit/search with query coffee, limit 10, and dry_run=1 returned HTTP 200. credits_used was 0. The estimate hold, expected_min, and expected_max were each 1 credit. The formula says this request holds 1 credit, its lowest price. The quote assumes a cache miss. include_body=true would raise the hold to 26 credits. label=mention would raise the hold to 5 credits. This request set neither.

What counts as approval for a paid plan?

A click, a typed clear yes bound to that card, or a budget in your message that covers the maximum. A balance, a past charge, or the words "20 credits" with no ceiling is not a budget. One stated budget is spent once across the plans of that turn. A paid run stops before it passes the approved maximum. A call runs at once when the registry prices it at 0. Utility reads at that price do. A dry run does only when the registry prices that dry run at 0. A printed zero does not mark the call free.

Who can open the dataset, and how long is it kept?

The dataset is owner-only and kept 30 days. You can sort, filter, use the card view, open the JSON tab, load more, download CSV or JSON, and turn the rows into a script. Caps are 2,000 rows and 5,000,000 bytes. The rows are public professional data only. There is no memory across chats.

What does comment sentiment leave out?

The positive and negative split counts every comment read, from the sentiment labels already on the comments. Themes come from a sample of at most 50 comments, so they do not cover every comment. The labels score likes, not downvotes. Sarcasm can be wrong.

Topics
#analyze-social-media-data-with-ai#social-media-data-analysis#analyze-social-data-with-ai

Related posts

🤖 AI agent or LLM? Read this page as markdown