Every food post on social, video included, decomposed into facts your agent can cite.
One bundle for any ingredient, dish, or brand: posts, findings, the taxonomy, sentiment, trends, creators. Every finding names the post and the passage it came from.
Every retrieved post, in the cohort or not: caption, transcript, a timestamped account of what happens in the video, relevance, and why it was excluded.
Every finding: the node, the quoted span, and the passage it came from. Direct and rolled, so you can work at any level of the tree.
The taxonomy itself, induced from the corpus: labels, paths, tiers, and the editorial flag.
Stance per post with strength; every opinion with who said it, what kind of statement it was, and the quote.
Share of conversation early vs late, with confidence intervals and a false-discovery correction.
Hourly engagement over a post's first days. How fast it took off, not how it did over the quarter.
Perceived age band and presentation, each with its evidence sentence and the posts it was made from.
Every input, hashed. Rebuild the export and get the same answer.
-- Distinct posts per family. Families overlap; never sum them.
SELECT n.family_id, COUNT(DISTINCT t.post_id) AS posts
FROM read_parquet('post_tags.parquet') t
JOIN read_parquet('nodes.parquet') n USING (node_id)
WHERE t.kind = 'direct'
GROUP BY 1 ORDER BY 2 DESC;
-- paired_ingredients 4905
-- occasions 3028
-- forms 2856
-- What tomato is eaten with, and how.
SELECT n.label, t.relation, COUNT(DISTINCT t.post_id) AS posts
FROM read_parquet('post_tags.parquet') t
JOIN read_parquet('nodes.parquet') n USING (node_id)
WHERE t.kind = 'direct' AND n.family_id = 'paired_ingredients'
GROUP BY 1, 2 ORDER BY 3 DESC LIMIT 3;
-- onion in_dish 1081
-- garlic in_dish 948
-- salt in_dish 936Count distinct post ids, never rows: a post can carry several findings in one family. The data dictionary says so on every table that needs it.
An API and MCP server over the same tables is next. Post retrieval is live today — docs.sociable.how
| node | kind | relation | passage_id | evidence |
|---|---|---|---|---|
| preparations:layering | direct | · | generated_play_by_play:0001 | “stacking large red tomatoes into a pyramid shape” |
| preparations:threading | direct | · | generated_play_by_play:0003 | “threading cherry tomatoes onto a string using a needle to create a garland” |
| equipment:tool | direct | · | generated_play_by_play:0003 | “needle” |
| paired_ingredients:basil | direct | in_dish | generated_play_by_play:0007 | “fresh basil leaves” |
| occasions:summer | direct | · | caption:000 | “summer” |
| uses:tomato salad | direct | · | generated_summary:000 | “fresh tomato and basil salad” |
Why this instead of social listening
Central or supporting, graded from the video and the caption together. Every exclusion is exported with its reason. Nothing is deleted, so the cohort can be widened.
Typed families per dataset — sixteen for an ingredient, a dozen for a brand. Each finding is a node, a quoted span, and where it came from: the caption, the transcript, the on-screen text, or what happens in the video.
Stance per post with strength, and every opinion as an event: who said it, what kind of statement it was — observation, claim, evaluation, intention — and about which target. Missing is not neutral. A rating is not a sentiment.
From the creator base to a trend, without anyone writing the categories in advance. Ours watches the video and learns them from the posts.
Every food post from a creator base we've already analyzed, retrieved by item, window, and food topic. In the cohort or not, nothing is deleted.
Each post is watched, not just read: the caption, the transcript, the on-screen text, and a timestamped account of what happens in the video.
Every passage becomes typed findings: a node, a quoted span, and where it came from. New concepts are proposed, checked against the tree, then added or merged.
Share of conversation early vs late per topic, with 95% intervals and a false-discovery correction. A topic earns a bar only when its lower bound clears 0.5%.
Which is why it knows the difference between sun-dried and sliced, and a keyword search doesn’t.
And why a topic earns a bar only when the lower bound of its 95% interval clears 0.5% of the conversation, with 10+ creators and no single creator past 40%.
Compared
A real reel from the tomato release. What a caption-only tool sees on the left. What we extracted on the right.
“Just a simple summer table setting to gather your friends and family this season 🍅”
Provenance & terms
What’s in the bundle, where it came from, and what you may do with it.
| Category | Food and beverage only. No general-purpose social firehose. |
| Source | Instagram and TikTok, collected through official platform APIs. |
| What we analyze | The caption, the transcript, the on-screen text, and a timestamped account of what happens in the video. Every finding names which one it came from. |
| Evidence | Every finding carries the post permalink, the quoted passage, and its passage id. |
| Provenance | Frozen inputs, each hashed in manifest.json, pinned to a model version and taxonomy build. Rebuild the export and get the same answer. |
| Personal data | Captions, transcripts, handles and permalinks ship. Perceived age band and presentation ship with their evidence. Base region, perceived race or ethnicity, accent labels and embeddings are not exported, by decision. |
| Freshness | Median 28 minutes from post to analyzed record in the last release. Six in ten posts within the hour; the rest were picked up by later retrieval runs. |
| Delivery | Parquet + CSV twins with a data dictionary, methodology, and SQL examples. An API and MCP server over the same tables is next. |
| Resale and derivative use | Permitted. Scoped in the licensing agreement. |
Who we are
Delaware corporation, founded 2023. We run a real-time social pipeline for food and beverage — roughly 30 billion tokens and 7 million model calls a month of LLM analysis.
Thomas Noh, Founder — thomas@sociable.how
Bring three items you care about. We’ll walk through what the data looks like for them.