FeaturesPricingBlogResourcesAboutContact
Sign inGet Started Free

An X (Twitter) feed widget that treats a post made of words as the point

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.

From the club account
Lampblack Runners3 hours ago

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.

4026348
Lampblack Runners11 hours ago

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

A runner on a wet waterfront promenade, empty benches along the railing and a suspension bridge and city skyline flattened by haze behind.
143917

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.

1
Premium source in the product, and this is it
325
Posts a month on the entry paid plan
40
Layouts in the studio
16
Themes, free on every plan

Most of what an account posts is a sentence, and a sentence is worth a column

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.

Layout
Theme
Display
Showing List Minimal
The 1500m start marking painted on a red running track, shot from ground level with the stadium out of focus behind.

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.

A runner on a wet waterfront promenade, empty benches along the railing and a suspension bridge and city skyline flattened by haze behind.

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

A building and bare branches reflected upside down in a puddle on wet asphalt.

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.

Bare and rust-coloured trees in a public park with fog sitting between them and leaf litter across the grass.

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 feed

A 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.

What a card carries, field by field

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 post text, carried whole

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.

Display name and avatar

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.

One image, when there is one

The first photo attached to the post. Text posts simply carry no image, which is the ordinary case rather than a failure state.

Age, floored

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.

Likes, replies and reposts

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.

A link back to the post

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.

What is not on the card, and why

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.

A photograph gets the full width, not a thumbnail

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 numbers painted across a red synthetic track, shot low along the lane lines in flat light.
Lampblack Runners5 days ago

Lane one is repainted and the club handicap is back on the 24th. Entries close when the whiteboard runs out of room.

128159

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 charges for every post read, so your plan carries a post budget you can see

This is the one platform we pay per post to read, and the only reason it is a paid source. Rather than hide that behind a vague limit, the budget is a number on your plan and the accounting behind it is worth a paragraph, because it is what stops a busy week costing you your month.

One pull, on the ledger
Reserved before the call50
Posts X returned34
Released back to you16
Charged to your month34

Illustrative figures in the real sequence: the budget is taken before X is called and the unused part is handed straight back.

Reserved first, so two syncs cannot spend the same credit

The budget for a pull is claimed under a row lock before the request to X goes out, and the part X did not fill is released the moment it answers. What you were charged for and what landed in your feed are the same number, even when several sources refresh in the same minute.

Nothing new costs nothing

Every sync asks X only for posts newer than the newest one already stored. A quiet week returns an empty answer, the whole reservation goes back, and your month is untouched. That marker also survives deleting the source and adding it again, so a re-add cannot be used to re-buy posts you already have.

The monthly number is a ceiling, not an estimate

Because the ledger is written before the call rather than after it, the monthly figure on your plan is the most that can ever be read in a month. Credits reset on the 1st.

Pro: 325 posts a month

First pull defaults to 50 posts per source, drawn from a 150-post allowance for new sources each month. Everything else is new posts only.

Business: 1,300 posts a month

First pull defaults to 100 posts per source, drawn from a 300-post allowance for new sources each month. Everything else is new posts only.

Scale: 3,000 posts a month

First pull defaults to 100 posts per source, drawn from a 500-post allowance for new sources each month. Everything else is new posts only.

It updates on its own, at a pace X can afford

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.

On a timer

X feeds refresh on their own schedule

They do update automatically, but not at your plan's general refresh rate. X sources carry their own floor because every read costs money: once a day on Pro, twice a day on Business and above. If a scheduled sync finds nothing new, it spends nothing.

Pro 24h · Business, Scale and Enterprise 12h

On demand

Or press Pull now and skip the wait

Paid plans get a manual pull between scheduled syncs, up to 100 posts a press and once an hour. It spends the credits you have banked by not using them, and it can only spend down to a floor that is held back for the scheduled syncs, so a quiet month is what makes a big manual pull possible.

100 posts per press · 1 press per hour · paid plans

Why an X source is slower than the others

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 a faster clock on a metered API would spend your monthly posts on checking rather than on posting. Live event walls lift every other platform to a two minute refresh and deliberately leave X where it is, for the same reason.

Layouts that do not need a photograph to hold together

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.

Lampblack Runners1 day ago

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.

Lampblack Runners4 days ago

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.

Lampblack Runners3 hours ago

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.

List Free plan

One post per row, full text, nothing cropped. The closest thing to reading the account itself, and the layout most pages should start with.

Lampblack Runners3 hours ago

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.

Quote wall

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.

Lampblack Runners6 days ago

Head torches from here until March. If you own one reflective thing, wear it on the arm that swings.

A person from behind under a black umbrella on a rainy street at night, traffic and shop lights thrown into long coloured reflections on the wet road.
Lampblack Runners4 days ago

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.

Social news

A lead post with an image over a run of headlines, so a mixed week of words and pictures still reads as one column.

An account, a hashtag, and nothing we had to take

Pro carries 1 X source, Business 2 and Scale 4, and each one can be either kind.

Your account

The profile timeline

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.

A hashtag

A public hashtag search

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.

Not scraped

The official API, or nothing

Every post comes from X’s own v2 API with a token you approved. We do not read x.com pages to get around a limit, which is why the monthly budget on this page is a real number rather than a marketing one.

Four steps, each shown with what it produces

The second step is the one no other platform has: you decide how much of the account's history to buy on the first pull. Everything after that is new posts only.

Step 1

Connect the account

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.

Add a source
X / TwitterTweets and hashtagsConnect

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.

Step 2

Say how much history you want

The first pull is the only one that buys back-catalogue, so you size it yourself instead of accepting a fixed number. Everything after it is new posts only.

First pull

You choose how much history to buy on the first pull. The default and the ceiling both come from your plan, and the page shows how many credits are left this month before you commit.

Step 3

Choose what publishes

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.

Collect

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.

Step 4

Paste one snippet

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.

Embed
<!-- 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.

One widget, every website platform

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.

Script embed

Plain HTML, WordPress, Webflow, React

One script tag and one container div. The widget renders inside a Shadow DOM, so its CSS and yours cannot interfere.

Wrapped script

Shopify

The same script with a page-width wrapper, because Shopify themes lay sections out with flexbox and would otherwise compress the container.

Iframe embed

Wix and Squarespace

Both sandbox or strip custom scripts, so these get an iframe that resizes itself as content loads. No clipped posts, no inner scrollbar.

Bare URL

Notion and Google Sites

Builders that cannot run scripts at all take a fixed-height frame by URL. Content scrolls inside it.

An X post reads better with company

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.

A couple silhouetted on a dune crest against a wide sunburst, ripples in the sand belowInstagram

Made the crest just before the sun did.

A city canal at night with pink and violet signage reflected the full length of the waterTikTok

The canal does this every night

Atlas & Pine7wFacebook

Stayed out for the last of the light and the whole lake turned pink with it.

A pink and violet sunset over dark mountain silhouettes and a still lake
Priya R.2 weeks agoGoogle

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.

Atlas & Pine@atlasandpine · 3dTwitter/X

Sunrise crew made the ridge before the storm broke. Whole set is up on the site now.

Marcus T.1 month agoGoogle

Second trip with them this year. Everything ran on time and the small group size is the whole point.

A surfer coming off the lip of a breaking wave, board clear of the waterInstagram

Off the top, first swell of the week.

A walker standing on a dark volcanic ridge as the sun breaks under storm cloud over the seaYouTube

Three days on the ridge trail, start to finish

Atlas & Pine5wFacebook

Lagoon day. Six boats out, nobody tipped in, and the water stayed that colour the whole afternoon.

Kayakers in red and yellow boats threading a turquoise lagoon between limestone cliffs
Hot-air balloons drifting over pale rock formations at dawnInstagram

Up before the balloons were.

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.

The one source you pay for, and why

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 the post budget, the number of sources and how quickly they sync.

Free, with a 7-day trial
  • X / Twitter: 1-week free trial
  • 100 posts of trial budget, no card
  • 7 of the 40 layouts, all 16 themes
  • Full curation: approve, pin, drop

After the trial, X becomes a paid source and every other platform stays free. Free widgets carry a small CollectSocials credit link.

Paid, from $20/month
  • Pro: 1 source · 325 tweets/mo
  • Business: 2 sources · 1,300 tweets/mo
  • Scale: 4 sources · 3,000 tweets/mo
  • Pull now on demand, 100 posts a press

All 40 layouts, hashtag sources, and the credit link removed. Full pricing breakdown.

X feed widget questions, answered straight

Is the X feed widget free?

No, and it is the only source in the product that is not. X charges for API access by the post read, 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 a budget of 100 posts and no card, and paid plans start at $20 a month.

How many X posts can a widget show?

Your plan has a monthly post budget: 325 on Pro, 1,300 on Business and 3,000 on Scale. That budget is spent on posts read from X, not on posts displayed, and the two are very different numbers. Once a post is in your feed it stays and costs nothing to keep showing, and a sync that finds nothing new spends nothing at all. The budget resets on the 1st.

How often does the feed update?

Automatically, on a schedule of its own. Most platforms sync at your plan’s general refresh rate, but X sources carry their own floor because every read is billable: once every 24 hours on Pro, and once every 12 hours on Business, Scale and Enterprise. Paid plans can also press Pull now for an immediate refresh, once an hour.

Do I need my own X developer account or API key?

No. The API access is ours, and you approve read access to your account on X’s 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.

Does it show retweets and replies?

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.

Can I show a hashtag feed instead of my own account?

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 return fewer than ten posts per search, so a hashtag pull waits until at least ten posts of budget are available rather than making a call that would be billed for more than it could store. The setup guide walks through it.

What happens when the monthly posts run out?

Your widget carries on serving every post it already has, because those are stored on our side rather than fetched on each page view. What stops is the fetching: scheduled syncs hold, Pull now declines, and everything resumes when credits reset on the 1st. Nothing disappears from your page and no visitor sees an error.

Can I choose which posts appear?

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.

Which website builders does it work with?

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.

Is it still Twitter or is it X?

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.

Can X posts sit beside my other platforms?

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.

Put the account on the site tonight

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.