The club 1500 record went tonight. 4:11.6, second attempt, into a headwind nobody wants to talk about. The board gets a new line in the morning.
Connect the account, choose which posts publish, and paste one snippet into any site builder. The post arrives whole and stays in your page, so a reader reads it where they already are instead of being sent somewhere else. Photographs are welcome. They are just not the requirement.
7-day trial with X switched on, no credit card.
The club 1500 record went tonight. 4:11.6, second attempt, into a headwind nobody wants to talk about. The board gets a new line in the morning.
Wet asphalt, flat grey river, six miles at talking pace. The best runs of the year are always in the worst weather of it.

Lampblack Runners is a demo account we invented, at an invented address, and the photographs are CC0 stand-ins. The column, the crop and the counts are the widget's.
A cancelled session, a result, a change of meeting point. Start on List, which gives each post its own row rather than a tile in a grid, then switch layouts and themes and turn captions, dates, avatars and badges on and off. No signup, no connection, and the posts below are the ones a running club would actually write.

The club 1500 record went tonight. 4:11.6, second attempt, into a headwind nobody wants to talk about. The board gets a new line in the morning.

Wet asphalt, flat grey river, six miles at talking pace. The best runs of the year are always in the worst weather of it.

Tuesday intervals are off. The track is a sheet of ice and we are not going to pretend otherwise. Easy five on the road instead, same time, same place.

Fog on the park loop at six, four degrees, nobody dropped off the back. Thursday is the same route in reverse.
List. One post per row, text beside its image. The closest thing to reading the account itself, and where a feed that is mostly words should start.
Build this with your own feedA preview, not the live renderer. The theme colours are read from the product's own theme definitions and the layout names are the real ones, but the shapes here are drawn for this page, because the widget renderer is a Deno edge function that a Next app cannot import. Every preview post carries a photograph so those drawn shapes have something to hold, while a real X feed is mostly text and the widget renders those posts whole. The studio itself carries 40 layouts and 16 themes, a theme builder on every plan, and renders the actual widget as you edit. Lampblack Runners is a club we invented, at an invented address, and the photographs are CC0 stand-ins.
These are the exact fields the widget is handed at serve time, and nothing else reaches the card. That fixed set is also why the box underneath can say plainly what a card will never show you.
The card holds the entire post rather than a preview that sends the reader somewhere else. It shows about five lines by default with a Read more control for the rest, and a layout can set that depth or switch the limit off.
The account name and picture as X returns them. If a post arrives without a picture, the card draws the first initial instead rather than leaving a hole.
The first photo attached to the post. Text posts simply carry no image, which is the ordinary case rather than a failure state.
Rendered as "3 hours ago" and floored, never rounded, so the dashboard and the embedded widget can never show the same post at two different ages.
Three counts, hidden individually when the platform has no such number. Reposts and quote posts arrive as separate figures and are added together into the single reposts count you see.
Every post keeps its own address on x.com. A card opens a panel with the whole post and a View on Twitter button by default, and you can set cards to open the original directly instead, or not to be clickable at all.
There is no handle under the name. The widget is handed a fixed set of fields at serve time and the account handle is not one of them, so drawing one on this page would be a picture of a feature that does not exist. The name, the age and the link back to the post are what identify it.
There is no follower count and no verification tick either. We show what the post carries, not a portrait of the account.
The first image attached to a post renders above the text at the width of the column. Because photographs are the exception in a text feed rather than the rule, they land as an event instead of as wallpaper.

Lane one is repainted and the club handicap is back on the 24th. Entries close when the whiteboard runs out of room.
Lampblack Runners is a demo account we invented, at an invented address, and the photographs are CC0 stand-ins. The column, the crop and the counts are the widget's.
X bills per post returned. That is the whole reason it is the one paid source here, and the reason every serious vendor in this category caps X sources rather than selling them by the dozen. So those are the two numbers worth knowing, and both of them are on this page.
Illustrative figures in the real sequence: you size the first pull, X answers with what the account actually has, and every sync after it asks only for what is newer.
X refreshes every 12 hours on every paid plan because X bills per post returned. It is one number rather than three, it is deliberately slower than every other network we support, and it is the same on Pro as it is on Scale. During the free trial an X source refreshes once a day. Your other platforms keep your plan's own update frequency.
Every sync asks X only for posts newer than the newest one already stored, so a quiet week returns an empty answer and changes nothing. That marker survives deleting the source and adding it again, so a re-add cannot pull down posts you already have.
Every post arrives through X's own documented v2 API on a token you approved. That is why the source count is capped rather than unlimited, and it is also why the feed does not depend on x.com page markup staying where a scraper last found it.
Each source can be a profile timeline or a public hashtag search. The first pull defaults to 50 posts and you can move it before you commit. Everything after that is new posts only.
Each source can be a profile timeline or a public hashtag search. The first pull defaults to 100 posts and you can move it before you commit. Everything after that is new posts only.
Each source can be a profile timeline or a public hashtag search. The first pull defaults to 100 posts and you can move it before you commit. Everything after that is new posts only.
Two mechanisms, and the honest version of both. An X source is not on the same clock as the rest of your feed, and the button that skips the clock is a paid one.
They do update automatically, but not at your plan's general refresh rate. X refreshes every 12 hours on every paid plan because X bills per post returned, and once a day during the free trial. A new post can therefore take up to a cycle to appear.
Every paid plan 12h 路 free trial once a day
Paid plans get a manual pull between scheduled syncs, up to 100 posts a press and once an hour, so something posted this morning does not have to wait for the next cycle to reach the page.
100 posts per press 路 1 press per hour 路 paid plans
Your plan sets a general refresh rate for every source you connect, from once a day on the free plan down to every few minutes at the top. An X source ignores it and takes the slower of the two, because X bills per post returned and a faster clock on a metered API pays to check rather than to publish. Live event walls lift every other platform to a two minute refresh and deliberately leave X where it is, for the same reason.
A grid built for pictures turns a text feed into a wall of grey rectangles. These three are shaped for words. All 40 layouts and all 16 themes work with an X feed, and the free plan includes 7 of the layouts plus every theme and the theme builder.
Tuesday intervals are off. The track is a sheet of ice and we are not going to pretend otherwise. Easy five on the road instead, same time, same place.
New here? Turn up at half six on a Tuesday or a Thursday. No membership form, no fee, and nobody is ever left running on their own.
The club 1500 record went tonight. 4:11.6, second attempt, into a headwind nobody wants to talk about. The board gets a new line in the morning.
One post per row, full text, nothing cropped. The closest thing to reading the account itself, and the layout most pages should start with.
The club 1500 record went tonight. 4:11.6, second attempt, into a headwind nobody wants to talk about. The board gets a new line in the morning.
One post at a time, set large, the rest waiting behind it. For a sentence that deserves the width of the page rather than a third of it.
Head torches from here until March. If you own one reflective thing, wear it on the arm that swings.

New here? Turn up at half six on a Tuesday or a Thursday. No membership form, no fee, and nobody is ever left running on their own.
A lead post with an image over a run of headlines, so a mixed week of words and pictures still reads as one column.
Pro carries 1 X source, Business 2 and Scale 5, each one can be either kind, and every one of them refreshes every 12 hours.
Connect the account and the widget reads its own posts. Original posts only: retweets and replies are excluded at the request, so the feed on your page is what the account said rather than what it passed along.
Point a source at a tag instead of an account and it reads the public recent-search endpoint, with no connection needed. Retweets and replies are filtered out there too. Available on every paid plan, and inside the trial.
Every post comes from X鈥檚 own v2 API with a token you approved. We do not read x.com pages to get around a limit, so the feed on your site does not depend on x.com markup staying where a scraper left it.
The second step is the one no other platform has: you decide how far back the first pull reaches into the account's history. Everything after that is new posts only.
Pick X / Twitter in the source list and approve read access on X's own screen. A hashtag source needs no connection at all, because it reads the public search endpoint.
Choosing this hands you to X's own sign-in page to approve read access. We never draw that screen, and we never ask for your password.
The first pull is the only one that reaches into the back catalogue, so you size it yourself instead of accepting a fixed number. Everything after it is new posts only.
You choose how far back the first pull reaches. The default and the ceiling both come from your plan, and the create page shows both before you commit.
Posts land in a queue where you approve, pin or drop each one, and keyword rules can filter them before you look. Curation is on every plan, free included.
The club 1500 record went tonight. 4:11.6, second attempt, into a headwind nobody wants to talk about. The board gets a new line in the morning.
Tuesday intervals are off. The track is a sheet of ice and we are not going to pretend otherwise. Easy five on the road instead, same time, same place.
Approve, pin to the front, or drop. Keyword rules can do it for you before you ever see the post.
The embed dialog asks where the widget is going and hands out the right snippet for that host. The step-by-step for each builder lives in the setup guide.
<!-- CollectSocials -->
<div id="cs-feed"></div>
<script src=".../widget.js"
data-feed-id="..."
data-container="cs-feed"
defer></script>Abridged, with the real attribute names and the real ids filled in for you. Builders that block scripts are handed a self-resizing frame instead.
The step-by-step for each host, including where the snippet goes in WordPress, Shopify, Wix, Squarespace and Webflow, is in the platform instructions in our setup guide. This page is the argument; that article is the walkthrough.
A script tag is not universally installable: some builders sandbox custom code, others strip it. So the embed dialog asks where you are installing and hands out the right snippet for that host.
One script tag and one container div. The widget renders inside a Shadow DOM, so its CSS and yours cannot interfere.
The same script with a page-width wrapper, because Shopify themes lay sections out with flexbox and would otherwise compress the container.
Both sandbox or strip custom scripts, so these get an iframe that resizes itself as content loads. No clipped posts, no inner scrollbar.
Builders that cannot run scripts at all take a fixed-height frame by URL. Content scrolls inside it.
One feed can combine 10 platforms, so a post can sit beside an Instagram photo, a Facebook update and a Google review in the same section. Every other platform in that wall is on the free plan.
Booked the sunrise trip on the strength of the photos and it was better than the pictures. The guides knew exactly where to be and when.
YouTubeThree days on the ridge trail, start to finish
TikTokThe swings go right out over the water
Sunrise crew made the ridge before the storm broke. Whole set is up on the site now.
Lagoon day. Six boats out, nobody tipped in, and the water stayed that colour the whole afternoon.

Second trip with them this year. Everything ran on time and the small group size is the whole point.
InstagramFound the yellow wall. Obviously we danced at it.
InstagramMade the crest just before the sun did.
InstagramUp before the balloons were.
End of the festival, and they let the whole lot go at once. Nobody said a word for about ten seconds.

A demo feed for an invented brand, showing 6 of the 10 live sources in one wall. The posts, reviewers and engagement numbers are illustrative, not product metrics. Every field on these cards is one the widget really renders, but the wall itself is drawn for this page rather than served by the widget.
X is the only platform that bills us for reading it, so it is the only one behind a paid plan. What you are buying is how many X sources you can run and how often each one refreshes.
After the trial, X becomes a paid source and every other platform stays free. Free widgets carry a small CollectSocials credit link.
All 40 layouts, hashtag sources, and the credit link removed. Paying yearly is two months free, so Pro is $290 a year, Business $590 and Scale $1,190. Full pricing breakdown.
No, and it is the only source in the product that is not. X bills per post returned, so an X feed costs us money every time it refreshes and a plan has to carry that cost. Every other platform we support is on the free plan. New accounts get X switched on for the 7-day trial with no card, on up to 3 sources that refresh once a day, and paid plans start at $29 a month, or $290 a year with two months free.
Every X post you approve stays in the feed and keeps serving, because posts are stored on our side rather than fetched on each page view. The only ceiling is your plan鈥檚 overall posts-stored limit, which is shared across every platform rather than being an X number. What a plan sets for X specifically is how many sources you can connect and how often each one refreshes: 1 source on Pro, 2 on Business and 5 on Scale, and every one of them refreshes every 12 hours.
Automatically, on a schedule of its own. Most platforms sync at your plan鈥檚 general refresh rate, but X sources carry their own floor: X refreshes every 12 hours on every paid plan because X bills per post returned. During the 7-day trial an X source refreshes once a day. Paid plans can also press Pull now for an immediate refresh, once an hour.
No. The API access is ours, and you approve read access to your account on X鈥檚 own sign-in screen. We ask for three permissions and no more: read posts, read your profile, and stay signed in so the feed can keep refreshing without you reconnecting every couple of hours. We cannot post, follow, message or delete anything.
No. A profile source asks X for original posts only, so retweets and replies never arrive in the first place. A hashtag source filters them out the same way. If you want a reply thread on your site, the honest way is to pin the post it belongs to and let a reader open the conversation on X.
Yes, on any paid plan and inside the trial. A hashtag source needs no account connection, because it reads the public recent-search endpoint with our own application credentials. One quirk worth knowing: that endpoint will not accept a request for fewer than ten posts, so a hashtag source is always asked for at least ten at a time rather than one or two. The setup guide walks through it.
X versions and documents its API, and every post in your feed arrived through it with a token you approved, so a feed here does not depend on x.com page markup the way a scraped one does. Posts already collected are stored on our side and keep serving even while a source is disconnected, so reconnecting an account is never a blank section on your page.
Yes, and on every plan. Posts land in a queue where you approve, pin to the front or drop each one, and keyword rules can filter them before you ever look. That matters more on X than anywhere else, because a timeline that reads well in a feed can read very oddly as a permanent section of your homepage. All 16 themes and the theme builder are on the free plan too.
WordPress, Shopify, Wix, Squarespace, Webflow, Notion, Google Sites, plain HTML and React. The embed dialog asks where the widget is going and hands out the right snippet for that host, because some builders sandbox custom scripts and others strip them. WordPress can skip the code entirely with our plugin.
Both names are in use and the product answers to either. The source is called X / Twitter in the dashboard, posts link back to x.com, the mark on each card is the X one, and the button that opens the original still reads View on Twitter. What actually changed for embedding is more than a logo, and the setup guide covers it.
Yes. One feed can combine 10 platforms, so an X post can sit next to an Instagram photo, a Facebook post and a Google review in the same section, styled as one wall rather than four widgets stacked up. For most sites that is the point: the photograph shows the thing and the post says what happened.
Connect X, choose the posts that publish, pick a layout, paste one snippet. The 7-day trial has X switched on and asks for no card.
Works with WordPress, Shopify, Wix, Squarespace, Webflow, Notion, Google Sites, React and plain HTML.