Adopt A Station Un-Wrapped: How to Recycle Data
Semipublic's newest product isn't just a donor engagement tool, it's a way to re-use a dataset of hundreds of thousands of industry social media posts.
Earlier this month, we launched Adopt A Station Un-Wrapped, a fun web app that connects potential donors to a small public media station through a series of questions.
The interface is simple: Users answer three easy questions - their favorite weekday (minus Friday, I’ll get to that later), their favorite animal, and favorite kind of event - and are then paired with a public media station based on those answers along with a quick explanation of why. But most importantly, they’re given links to the main website and donation portal of their "perfect match” station.
At first blush, it’s easy to assume that Un-Wrapped matches are completely random. How can you assign a personality to both a random person and a public media station and match them together? The answer, it turns out, isn’t that complicated…if you have every public media Facebook post from the past twelve months.
When I started Semipublic back in April, we were focused on station finances and their reliance on federal funding. But as interest in the industry grew — as well as the threat of federal funding cuts — so did the scope of Semipublic. We started tracking and providing unique insights about industry 990s, lobbying disclosures, layoffs, and hiring trends. Soon, Semipublic was much more than a newsletter: We became a central place for donors, journalists, and public media fans to get information about what was happening in public media.
Public media in the U.S. is rapidly changing, and a central, independent organization dedicated to tracking these changes is needed now more than ever. That’s why we’re proud to announce that we are launching Semipublic as a non-profit 501(c)(3). And we need your help getting started.
We’re asking for your help to raise $30,000, enough to launch Semipublic as a 501(c)(3). You can do that by giving at our GoFundMe - or by becoming a paid subscriber.
Background
One of the main missions of Semipublic (including the new non-profit we’re spinning off) is to watch and analyze the public media industry through its data. Since the beginning of November, we’ve pulled back a bit on publishing on Substack in order to focus on forming the non-profit and begin gathering a broader variety of public media data. That includes social media - one of the most public and easily-accessible ways for listeners and viewers to interact with radio and television stations.
Public media stations are particularly prolific on Facebook, where Semipublic has gathered over 100,000 posts from the past 12 months. This data is extremely valuable in tracking the industry for several reasons:
First is that, while some stations post all of their local journalism and content to Facebook, most will curate a selection of their best for their social media audience. This helps identify what stations themselves perceive as being important to communicate.
Second is tracking the variation in relative engagement among station posts. Before Thanksgiving, we posted a quick study into which Facebook posts performed the best in 2025, which happened to be posts about No Kings protests.
And finally, stations will periodically post public updates about their own operations, especially concerning personnel changes or fundraising/grant outcomes. There is currently no way to track how much money stations have received week-to-week (that doesn’t involve self-reporting) and a major goal of ours is to develop a method to estimate fundraising and grant totals using public reporting through social media.
But what else do you do with an enormous dataset - one that required a lot of time and attention to gather - when these objectives are complete, or on the back-burner?
Preparing Station Data for Un-Wrapped
Semipublic has a secondary mission, which I discovered a bit by accident in July when I quickly launched Adopt A Station: When there is a service gap or opportunity identified through our primary mission (data analysis and insights), Semipublic will create a product, if possible, to meet that need.
I’ve always been a fan of Spotify Wrapped, the year-end summary they provide for all users, and while Semipublic doesn’t have a user dataset to generate insights from like Spotify, there were certainly opportunities to pull basic patterns out of station Facebook posts that could connect an Adopt A Station visitor with a station in need. So, I picked three easy, somewhat arbitrary datapoints that are unobtrusive to ask users about and have some way to quantify through Facebook post data: Day of the week, name of an animal, and name of an event. I also set a boundary for stations that I’d be connecting users with, as well as performing Facebook post analyses on: They had to be categorized as “small” according to CPB’s guidelines, which meant > $800k total revenue for radio stations and > $2.3m total revenue for TV stations. For stations that I had Facebook data for, that turned out to be about 30.
The simplest metric of the three was day of the week. I wanted to encourage variety among days of the week picked, so I narrowed the days measured down to Monday through Thursday. Thankfully, there was at least one station that averaged the most posts on each of the four weekdays, with Thursday being the most popular by a fraction of a percentage.
Types of animal and event were much harder: There are an indeterminate amount of words that can be used for both that not only needed to be extracted from post text but also then ranked by occurrence. And this needed to happen for every single small station.

For this task I combined n8n, the automation tool, with an LLM. Despite the recent pessimism about AI, it remains an incredibly powerful tool for low-level categorization tasks. In the automation, each station and its Facebook post data were summoned individually. Then, they were fed to a free, non-training LLM (Z.ai’s GLM 4.5 Air) that was instructed to examine all posts and rank the event or animal nouns that occurred the most in an array. Finally, the data was saved to a new public-facing Postgres server for later use with the Un-Wrapped web app.
Serving The Results
With the data already sorted and ranked for the small stations, the last two goals were to make a simple, attractive interface as well as the final automation that would serve a station match back to users.
For the first goal, I once again used bolt.new, a “vibe-coding” tool that uses Anthropic Claude models to create website front-ends. Three questions are presented to the user, one on each page, and the results are then sent by webhook back to my n8n server for processing. The Un-Wrapped website then waits for a webhook response with the user’s station match.
When the webhook first reaches the n8n server, the automation first double-checks that the origin of the webhook is unwrapped.adoptastation.org. Then, it filters stations by the weekday chosen by the user, only keeping stations whose busiest posting day on Facebook was that specific weekday. Then, the same free LLM from before is instructed to examine the animal and event names provided by the user and match them to the remaining stations using the arrays gathered earlier. In this way, the arrays act as a sort of ranked-voting system, assigning heavier weights to matching nouns that are higher in the arrays. Finally, the LLM matches the two choices to a station and returns the answer as a response to the original webhook with links to the station’s website and donation portal. If no matches are found, then the LLM will pick a station at random to respond back with.
And, just for fun, the user also gets back a horoscope-like description based on personality traits assigned to the station. Because why not?
Value to Users, Value to Semipublic
In the end, we’ve accomplished several objectives. The first being an interesting alternative use for a 100,000+ dataset of social media posts.
We’ve also demonstrated several easy ways to not only extract text-based metrics from social media posts but also give them meaning.
And finally - most importantly - we’ve created another way for potential donors to interact with and discover lesser-known public media stations, all of which was accomplished inside of a week.
You can find Adopt A Station Un-Wrapped at unwrapped.adoptastation.org. Give it a try, see which stations you get paired with, and let me know what you think!







