Category: Social Media

  • Social media embeds slow page load by 2–4 seconds—here’s the fix

    Social media embeds slow page load by 2–4 seconds—here’s the fix

    Social media embeds slow page load by 2–4 seconds—here's the fix
    Photo by Aman Pal on Unsplash

    Every time you paste a tweet, Instagram post, or Facebook update into your blog, you’re handing a third-party script control over your page speed. The average social media embed adds 400–800 KB of JavaScript, plus external font files, tracking pixels, and iframe overhead. For a solo operator running a content site, that’s the difference between a 1.2-second load time and a 4-second slog that kills SEO and conversions.

    The problem isn’t the content—it’s how the platforms deliver it. Social embeds don’t just pull in the post you want. They load entire widget libraries designed for scale and tracking, not performance.

    What social embeds actually load

    When you embed a single tweet using Twitter’s standard embed code, the browser downloads:

    • Twitter’s widgets.js library (approximately 450 KB)
    • Additional stylesheets and fonts (150–200 KB)
    • Tracking scripts for analytics and ad attribution
    • An iframe that makes separate requests back to Twitter’s CDN

    Instagram is worse. A single Instagram embed can trigger 600–900 KB of assets, including the embed.js library, multiple CSS files, and high-resolution image variants you never asked for.

    Facebook’s embed SDK comes in around 350 KB but adds the Social Plugin framework even if you’re only showing one post. If you embed content from multiple platforms on the same page, you’re stacking these libraries—each one blocking or delaying your actual content from rendering.

    Lazy-loading: load embeds only when visible

    The fix is lazy-loading: defer loading the embed scripts until the user scrolls near them. Most visitors never scroll to the bottom of a 2,000-word post, so there’s no reason to load a tweet that sits in paragraph 47.

    Lazy-loading cuts initial page weight and speeds up Time to Interactive, the metric Google uses for Core Web Vitals scoring. Here’s how to implement it without a plugin.

    Replace the platform’s default embed code with a static placeholder—a screenshot or a styled <blockquote> with the post text. Wrap it in a <div> with a unique class like lazy-embed. Then add this JavaScript snippet to your site:

    const embedObserver = new IntersectionObserver((entries) => {
      entries.forEach(entry => {
        if (entry.isIntersecting) {
          const script = document.createElement('script');
          script.src = entry.target.dataset.embedSrc;
          document.body.appendChild(script);
          embedObserver.unobserve(entry.target);
        }
      });
    });
    document.querySelectorAll('.lazy-embed').forEach(el => embedObserver.observe(el));

    Store the original embed script URL in a data-embed-src attribute on your placeholder div. When the user scrolls within 200 pixels of the embed, the Intersection Observer fires, loads the script, and the platform renders the live embed.

    Static fallbacks for critical embeds

    Lazy-loading works for supplementary content—testimonials, example posts, or visual flair. But if the embed is the content (a Twitter thread you’re analyzing line-by-line, or an Instagram carousel you’re critiquing), lazy-loading breaks the reading experience.

    In those cases, use a static fallback that doesn’t require JavaScript at all. Copy the post text into a <blockquote>, include a linked timestamp to the original, and host a screenshot as a fallback image. You lose the interactive widget, but you keep the content accessible and fast.

    This approach also future-proofs your archive. When Twitter rebrands, Instagram changes its embed API, or Facebook deprecates a plugin version, your static fallback still renders. I’ve seen three-year-old posts where the live embed returns a 404, but the blockquote text and screenshot preserve the original context.

    WordPress plugins and platform support

    If you’re on WordPress, the Lazy Load for Social Embeds plugin handles Twitter, Instagram, YouTube, and Facebook automatically. It replaces oEmbeds with placeholders and triggers the real embed on scroll. No custom code required.

    For builders using static site generators (Eleventy, Hugo, Next.js), write a shortcode or component that outputs the placeholder markup and includes the lazy-load observer script once per page. Keep the observer logic in a separate file so it’s cached and reused across posts.

    One non-obvious tip: set the Intersection Observer’s rootMargin to '200px' so embeds start loading slightly before they enter the viewport. This gives the script time to fetch and render before the user actually sees the placeholder, making the transition feel instant.

    If you run a content site with more than a dozen posts that include social embeds, audit your heaviest pages with Chrome DevTools or WebPageTest. Check the Network tab filtered by third-party domains. You’ll see exactly how much weight each platform adds—and how much faster your site loads when you defer it.

    Have a page-speed question or a tool you want explained? Reply to this email—we pick reader questions for Sunday’s Q&A.

  • Social media scheduling APIs break drafts—here’s what gets lost

    Social media scheduling APIs break drafts—here’s what gets lost

    Social media scheduling APIs break drafts—here's what gets lost
    Photo by Walls.io on Unsplash

    Social media scheduling tools promise seamless queue management across platforms. But if you’re building custom workflows—Zapier automations, Make scenarios, or direct API integrations—you’ll quickly discover that “draft” doesn’t mean the same thing to every tool.

    Most social schedulers expose a publish endpoint and a queue endpoint. What they don’t expose cleanly: draft state, revision history, or partial edits. When you push a post via API, it’s either scheduled or it’s not. The in-between states that exist in the web UI often vanish when you automate.

    What draft state actually means

    In most scheduling tools, a draft is a post that exists in the database but hasn’t been assigned a publish time. It’s a holding area. You can edit it, attach media, add tags, then decide later whether to schedule or delete it.

    But APIs don’t mirror this workflow. Most tools require you to pass a scheduled_at timestamp when you create a post via API. If you don’t, the post either publishes immediately or throws an error. There’s no “save this as a draft and let me come back to it” option.

    Publer is one exception—it allows null scheduling via API and treats those posts as drafts. But even there, you can’t retrieve draft metadata like “last edited by” or “created from automation.” The web UI shows that context; the API doesn’t return it.

    What breaks when you automate

    Here’s a common workflow: you use an AI tool to generate social copy variations, push them to your scheduler as drafts, then manually review and approve each one before it goes live.

    If your scheduler’s API doesn’t support true draft state, you’re forced to pick a workaround:

    • Schedule everything far into the future (e.g., December 31, 2030), then manually move posts forward. This clutters your queue and makes it hard to see what’s actually scheduled.
    • Store drafts in a separate tool (Notion, Airtable, a Google Sheet), then manually copy-paste into your scheduler. This defeats the purpose of automation.
    • Push directly to the platform API (Twitter, LinkedIn, Instagram) and skip the scheduler entirely. This works, but you lose centralized analytics and multi-platform posting.

    None of these are clean. All of them add friction back into a workflow you were trying to automate.

    Which tools handle drafts cleanly

    I tested five popular schedulers to see which ones preserve draft state when you create posts via API:

    • Publer: Full draft support. You can POST to /posts with no date field, and it saves as a draft. You can retrieve drafts via GET and update them later.
    • Buffer: No draft support. Every API call requires scheduled_at or the post publishes immediately. The web UI has a drafts tab, but you can’t create drafts programmatically.
    • Later: Partial support. You can create “unpublished” posts, but they’re tied to a specific calendar slot. Moving them requires a separate PATCH request, and there’s no way to bulk-retrieve unpublished items.
    • Hootsuite: No API access to drafts. You can create scheduled posts, but anything without a timestamp is rejected.
    • Metricool: Similar to Buffer—scheduled or live, no in-between.

    If draft state matters to your workflow, Publer is the only tool in this group that treats it as a first-class API feature.

    How to route around it

    If you’re locked into a scheduler that doesn’t support drafts via API, here’s what works:

    Use a staging tag. Create a unique tag like draft-pending and attach it to every post you create programmatically. Schedule everything for a distant date, filter your queue by tag, and batch-review. When you approve a post, remove the tag and reschedule it.

    Build a lightweight draft layer. Store draft content in Airtable or Notion, mark each row as “approved” or “pending,” then trigger a Zapier or Make automation that only schedules posts marked approved. This adds a table to maintain, but it gives you full control over state.

    Use webhooks to pull, not push. Instead of pushing drafts into your scheduler, set up a webhook that fires when you mark a draft “ready” in your CMS or AI tool. The webhook calls your scheduler’s API at that moment—no orphaned drafts, no clutter.

    None of these are as clean as native draft support, but they’re predictable and won’t break when your scheduler updates its API.

    What to ask before you automate

    Before you wire up a social scheduling automation, check the API docs for these three things:

    • Can I create a post without a scheduled_at timestamp?
    • Can I retrieve posts that haven’t been scheduled yet?
    • Can I update a draft after creation without republishing it?

    If the answer to any of those is no, plan your workaround before you build. Draft state isn’t a nice-to-have—it’s the difference between a smooth review process and a queue full of junk you can’t easily filter.

    Want more tooling breakdowns like this? Reply and tell me which API quirks cost you the most time—I’ll cover it in a future piece.

    Heads up — some links in this article are affiliate links. If you sign up through them, we may earn a small commission at no extra cost to you. We only recommend tools we use ourselves.

  • Stop chasing vanity followers—audience size matters less than you think

    Stop chasing vanity followers—audience size matters less than you think

    Stop chasing vanity followers—audience size matters less than you think
    Photo by Adis Colic on Unsplash

    The standard advice for growing an online business sounds obvious: build a bigger audience. More followers means more reach. More reach means more revenue. Except the data from actual operators running content businesses tells a messier story.

    A creator with 50,000 Instagram followers and 2% engagement reaches 1,000 people per post. Another with 5,000 followers and 20% engagement reaches the same number. The difference? The second operator knows exactly who those 1,000 people are, what they need, and how to sell to them.

    Vanity metrics—follower counts, subscriber numbers, page views—dominate because they’re easy to track and easy to brag about. But they correlate poorly with the numbers that actually matter: conversion rate, average order value, and lifetime customer value.

    The revenue math breaks at scale

    Take two newsletter operators. Operator A has 25,000 subscribers, a 22% open rate, and a 0.8% click-through rate to paid products. That’s 5,500 opens and 44 clicks per send. If 10% of those clicks convert at a $50 average order value, that’s $220 per email.

    Operator B has 3,000 subscribers, a 45% open rate, and a 4% click-through rate. That’s 1,350 opens and 54 clicks. Same 10% conversion at $50 gets $270 per send—more revenue from an audience one-eighth the size.

    The difference isn’t luck. Operator B likely built their list through a narrow lead magnet, sends to a segmented audience, and writes for a specific person solving a specific problem. Operator A probably grew through viral content, giveaways, or bundled list swaps—all of which inflate numbers while diluting intent.

    This pattern holds across platforms. A YouTube channel with 8,000 subscribers in a tight niche—say, Webflow automation for agencies—will often out-earn a generalist productivity channel with 80,000 subscribers. Sponsorship rates follow engagement and audience fit, not raw numbers. Affiliate conversions come from trust, not impressions.

    Smaller audiences cost less to serve

    Once you pass certain thresholds, audience growth becomes expensive. Email platforms tier pricing by subscriber count: MailerLite charges $9/month for up to 1,000 subscribers and $18/month for 2,500. Beehiiv‘s Scale plan starts at $42/month for up to 10,000 subscribers but jumps to $84/month at 25,000.

    If half your list is unengaged—people who subscribed once and never opened again—you’re paying to store dead weight. A 10,000-subscriber list with 50% engagement costs the same as a 5,000-subscriber list with 100% engagement, but the latter generates better deliverability, higher open rates, and more revenue per send.

    The same logic applies to hosting and infrastructure. A site with 100,000 monthly visitors and a 0.5% conversion rate needs more server resources than a site with 10,000 visitors and a 5% conversion rate. The first pays for CDN bandwidth, caching layers, and database overhead to serve traffic that never converts. The second runs on a $30/month managed WordPress host and spends the savings on better content.

    Focus on density, not scale

    If vanity metrics don’t predict revenue, what does? Audience density: the percentage of your audience that knows what you do, trusts your recommendations, and has a problem you can solve.

    High-density audiences come from narrow positioning. Instead of “productivity tips for entrepreneurs,” try “workflow automation for solo SaaS founders.” Instead of “social media strategy,” try “LinkedIn content systems for B2B consultants.” The tighter the niche, the higher the intent, and the easier it is to convert attention into revenue.

    Prune your list regularly. If someone hasn’t opened an email in six months, remove them or send a re-engagement campaign. Most platforms let you suppress or delete unengaged subscribers—do it. Your open rates will climb, your sender reputation will improve, and your cost per engaged subscriber will drop.

    Track revenue per subscriber or revenue per follower as a north-star metric. If you have 5,000 newsletter subscribers and generate $2,000/month from that list, you’re earning $0.40 per subscriber per month. That number matters more than whether your list grows to 6,000 or 10,000 next quarter. If revenue per subscriber stays flat or declines as you grow, your acquisition strategy is broken.

    When size actually matters

    Audience size isn’t irrelevant—it’s just overrated. There are a few scenarios where raw numbers unlock real opportunities:

    • Sponsorship deals: Some advertisers set hard minimums—10,000 email subscribers or 50,000 social followers—before they’ll negotiate. If sponsorship revenue is your primary model, you’ll need to hit those thresholds.
    • Platform algorithms: YouTube, Instagram, and TikTok reward consistency and volume. A larger back catalog and higher follower count can improve distribution, but only if engagement rates stay healthy.
    • Media credibility: Journalists and podcast bookers still use follower counts as a rough credibility signal. A 20,000-subscriber newsletter gets more inbound PR opportunities than a 2,000-subscriber one, even if the smaller list has better engagement.

    But in each case, size is a threshold or a signal—not the thing that generates revenue. Once you clear the minimum, density and conversion mechanics matter more.

    If you’re optimizing for the wrong metric, reply and tell me which one you’re stuck on. I’ll feature the best answers in a future Q&A piece.

    Stop counting followers. Start counting dollars per follower.

    Heads up — some links in this article are affiliate links. If you sign up through them, we may earn a small commission at no extra cost to you. We only recommend tools we use ourselves.

  • Social platform APIs throttle read requests faster than writes

    Social platform APIs throttle read requests faster than writes

    Most solo operators automate social posting without realizing that fetching data from social platforms burns through API quotas two to five times faster than publishing content. If you’re building workflows that pull engagement metrics, follower lists, or historical posts, you’ll hit rate limits long before your posting automation breaks.

    This asymmetry isn’t accidental. Platforms want you to publish—it’s free content for them. But reading data at scale lets you build competing analytics products, scrape competitor insights, or export your audience. So they throttle reads aggressively.

    How the limits actually break down

    Twitter’s free API tier gives you 10,000 read requests per month but allows 50,000 tweets. LinkedIn’s API (available only to approved partners) caps profile lookups at 100 per day, while post publishing has no hard daily cap for most use cases. Instagram’s Graph API allows 200 read calls per hour but handles significantly more media uploads in the same window.

    The result: you can schedule a month of posts without trouble, but a single workflow that checks your last 500 tweets for engagement stats will exhaust your quota in an afternoon.

    Publer and similar social schedulers stay within limits by caching aggressively and batching requests. If you’re building custom automation with Make or Zapier, you don’t get that layer of protection by default.

    Where automation workflows break first

    The most common failure point is analytics dashboards. A Zap that pulls yesterday’s top posts from three platforms, calculates engagement rates, and logs them to a Google Sheet will chew through 90–150 API calls per run. Do that daily, and you’re at 2,700–4,500 calls per month—just from one simple report.

    Another trap: workflows that check if a post exists before publishing a duplicate. Every existence check is a read. If you’re cross-posting the same content to Twitter, LinkedIn, and Facebook, and each platform requires a lookup to confirm the post isn’t already live, you’ve tripled your read quota burn for no publishing benefit.

    Follower-sync workflows hit limits fastest. Pulling your full follower list from LinkedIn every week to update a CRM costs 100+ calls per run if you have a few thousand connections. Do it weekly, and you’re over budget in a month.

    How to route around the limits

    Cache everything you can locally. If you need engagement data for analysis, pull it once per week and store it in Airtable, Notion, or a Google Sheet. Run reports against your own data, not the live API.

    Batch your reads. Instead of checking post performance every time you publish, schedule one daily or weekly job that fetches all recent posts in a single pass. You’ll use 7–30 calls per month instead of 200+.

    Use webhooks when platforms offer them. Facebook and Instagram can push post insights to your server when events happen, eliminating the need for polling. Twitter’s webhook support is limited, but if you’re on a paid tier, it’s worth the setup cost.

    For follower syncs, only pull deltas. Most APIs let you request changes since a timestamp. If you’re tracking new followers, ask for additions since your last check instead of re-fetching the entire list.

    When to pay for higher limits

    Twitter’s Basic tier costs $100/month and raises read limits to 10,000 per month at the app level—but it’s still far below what you’d need for daily analytics across multiple accounts. The real break-even comes if you’re running client work or managing five-plus brands. At that scale, a single shared automation hitting limits blocks everyone.

    LinkedIn doesn’t sell API access directly to solo operators. You’ll need to partner with an approved vendor or use a tool like Shield Analytics, which costs $20–50/month and includes pre-built rate-limit management.

    For Instagram, the Graph API is free but requires a Facebook Business account and app review. If you’re just scheduling posts, stick with a tool that’s already approved. If you’re building custom dashboards, expect to spend a week on the approval process and another week handling edge cases when the API changes.

    Most operators don’t need higher limits—they need smarter workflows. If you’re burning through read quotas, audit your Zaps or Make scenarios for redundant lookups, and switch to a weekly batch job. You’ll stay under free-tier caps and spend your time on content, not API accounting.

    One Two Three Send covers automation, APIs, and workflow design for solo operators every week. Subscribe here to get the next deep-dive in your inbox.

    Heads up — some links in this article are affiliate links. If you sign up through them, we may earn a small commission at no extra cost to you. We only recommend tools we use ourselves.

  • Social media carousel posts: when ten slides kill engagement

    Social media carousel posts: when ten slides kill engagement

    Platform algorithms love carousel posts. Instagram, LinkedIn, and Facebook all reward multi-slide content with extended reach because users spend more time swiping through them. That’s the pitch, anyway.

    The reality for solo operators: most carousels perform worse than single-image posts because completion rates tank after slide three. You get the initial engagement bump, then watch 80% of your audience bail before seeing your call-to-action on slide ten.

    Here’s what actually works, based on engagement data from operators running content businesses on Instagram and LinkedIn.

    The completion cliff happens at slide four

    LinkedIn’s own analytics show that carousel posts with four to six slides get the highest completion rates—around 60% of people who engage will see the final slide. Push that to eight slides and completion drops to 35%. Go to ten or twelve slides and you’re looking at 15-20% completion.

    Instagram’s behavior is similar. Posts with three to five slides maintain swipe-through rates above 50%. Beyond that, users assume the content is either repetitive or padded, and they scroll past.

    This matters because most operators bury their CTA on the last slide. If only 20% of engaged users see it, your conversion rate collapses no matter how good the top-of-funnel hook is.

    Slide count vs. content density

    The advice to “add value on every slide” sounds good, but it creates a different problem: cognitive load. If each slide introduces a new concept, tool, or step, users disengage because they can’t process ten discrete ideas in 30 seconds.

    High-performing carousels follow a different structure:

    • Slide 1: Hook or thesis—one sentence, large text, high contrast.
    • Slides 2-4: Core content. Each slide elaborates one point. No new concepts after slide four.
    • Slide 5: CTA or summary. Assume this is the last slide most people see.
    • Optional slide 6: Secondary CTA or credential-builder (“I’ve done this for X clients” or “This drove Y result”).

    If you need more than six slides to make your point, you’re either covering too much ground or padding for algorithmic favor. Both backfire.

    When to use ten slides anyway

    Long carousels work in two situations: lead magnets and tutorials where users expect to save the post for later.

    If your carousel is a step-by-step guide to setting up a WordPress staging site or a checklist for launching a paid newsletter, users will save it and return when they need it. Completion rate on first view doesn’t matter—saves and shares become your primary metric.

    In this case, slide ten can hold your CTA because the user who saves the post will eventually scroll through the full sequence when they’re ready to act. You’re optimizing for intent, not impulse.

    But if your goal is immediate engagement—replies, profile visits, link clicks—keep it to five slides or fewer. The algorithm boost from a carousel format isn’t worth a 70% completion drop.

    Scheduling tools and slide limits

    Most social scheduling platforms support carousels, but slide limits vary. Publer lets you upload up to ten images per carousel for Instagram and LinkedIn. Buffer caps LinkedIn carousels at fifteen slides but warns that performance drops after six. Later supports up to ten slides across platforms but doesn’t auto-optimize for completion rates.

    None of these tools will stop you from uploading a twelve-slide carousel. They also won’t tell you that your engagement rate is about to fall off a cliff.

    If you’re batch-scheduling carousels, set a internal rule: five slides maximum unless the post is explicitly a save-and-reference resource. Track completion rate (Instagram Insights and LinkedIn analytics both surface this) and compare it against your single-image posts. If carousels aren’t outperforming by at least 20%, you’re wasting time on extra slides.

    What to do instead

    If you have ten points to make, split them into two carousels published a week apart. Each one will get better completion rates, and you’ll have two chances at algorithmic distribution instead of one post that half your audience abandons.

    Alternatively, post a three-slide carousel as a hook, then drive traffic to a blog post or newsletter archive where you can expand without fighting platform attention spans.

    Carousels are a formatting choice, not a strategy. If the content doesn’t justify multiple slides, a single strong image with a tight caption will outperform a padded carousel every time.

    What’s working for you? Reply with your average carousel completion rate—I’m tracking operator benchmarks for a future piece.

    Heads up — some links in this article are affiliate links. If you sign up through them, we may earn a small commission at no extra cost to you. We only recommend tools we use ourselves.

  • Instagram Threads API: What It Does and What It Still Can’t Do

    Instagram Threads API: What It Does and What It Still Can’t Do

    Meta released the Threads API in June 2024, and after two years of iteration, it’s finally stable enough for solo operators to trust. But “stable” doesn’t mean “complete.” If you’re deciding whether to pipe content into Threads via a third-party tool—or build a custom integration—you need to know where the guardrails are.

    Here’s what the API actually supports, what it doesn’t, and one non-obvious limitation that breaks scheduling workflows more often than you’d expect.

    What the Threads API Lets You Do

    The current version supports programmatic publishing: text posts up to 500 characters, single images, carousels, and video. You authenticate via Meta’s developer portal, generate a long-lived access token (valid for 60 days), and POST to the publishing endpoint. Response time averages 1.2 seconds for text-only posts, 4–7 seconds for media uploads.

    Third-party schedulers like Publer and Hootsuite route through this API. You draft in their interface, schedule a time, and the tool fires the publish request on your behalf. It works—most of the time.

    The API also supports read operations: you can pull your own thread metrics (views, likes, replies, quotes), fetch replies to a specific thread, and retrieve your profile metadata. Rate limits sit at 200 requests per hour per user token, which is enough for a solo operator scheduling 3–5 posts per day and checking analytics once or twice.

    What’s Still Missing

    Three big gaps remain, and they’re not on Meta’s public roadmap.

    First: carousel post previews. You can upload up to 10 images in a carousel via the API, but there’s no way to preview how the cropping and ordering will render before the post goes live. Desktop simulators exist for Instagram, but Threads’ mobile-first layout differs enough that what looks clean in a 1:1 preview often clips awkwardly on the actual feed. You won’t know until it’s published.

    Second: scheduling beyond 75 days. The API accepts a publish_time parameter, but it rejects any timestamp more than 75 days in the future. That’s fine for daily schedulers, but if you batch content quarterly or run evergreen campaigns tied to fixed dates six months out, you’ll need to manually reschedule or script a secondary trigger closer to publish time.

    Third: no support for polls, GIFs, or link previews. Threads introduced native polls in March 2025, but the API still doesn’t expose a poll creation endpoint. Same for GIFs—they’re supported in the mobile app, but API calls strip them to static images. Link previews render automatically when you paste a URL in the app, but API-published posts display raw text links with no card, no thumbnail, no title. Engagement on link posts drops 30–40% as a result.

    The Non-Obvious Problem: Token Expiry During Scheduled Windows

    Here’s what breaks more workflows than media upload failures: Threads access tokens expire after 60 days, and there’s no automatic refresh mechanism.

    If you schedule a post for 62 days out, the API accepts the request at queue time—because the token is still valid. But when the publish window arrives, the token has expired, and the request fails silently. Most schedulers don’t surface this failure in real time. You’ll only notice when you check your profile two days later and realise the post never went live.

    The fix: set a recurring calendar reminder every 55 days to regenerate your token, or use a scheduler that auto-refreshes tokens via OAuth. Publer handles this for Threads; Buffer and Later don’t yet (as of June 2026).

    When to Use the API vs. Posting Natively

    Use the API if you’re cross-posting the same content to Twitter, Bluesky, and Threads. The time savings justify the format compromises.

    Post natively if you’re running a campaign where polls, GIFs, or link cards matter—product launches, surveys, or affiliate content. The API isn’t mature enough to preserve those elements yet.

    And if you’re scheduling more than two months out, plan to refresh tokens manually or script a cron job that regenerates them every 50 days. The 60-day expiry isn’t changing anytime soon.

    Want breakdowns like this for other platform APIs? Reply with the tool you’re trying to automate—I’ll cover it in a future edition.

    Heads up — some links in this article are affiliate links. If you sign up through them, we may earn a small commission at no extra cost to you. We only recommend tools we use ourselves.

  • Buffer vs. Publer vs. Later: which social scheduler fits a solo operator

    Buffer vs. Publer vs. Later: which social scheduler fits a solo operator

    Most solo operators pick a social scheduler based on brand recognition or a recommendation they half-remember from a Reddit thread. Then they hit the first billing cycle and realize they’re paying for features they don’t use—or missing the one workflow shortcut that would save them three hours a week.

    Here’s a side-by-side comparison of Buffer, Publer, and Later: three schedulers that dominate the solo-operator and small-team space. No sales pitch. Just what each does well, where it falls short, and who should pick it.

    Buffer: the clean interface with the highest per-seat cost

    Buffer’s strength is simplicity. The composer is fast, the calendar view is uncluttered, and the analytics dashboard doesn’t bury the metrics that matter. If you’re scheduling ten posts a week across three networks and you value a tool that doesn’t require a manual, Buffer delivers.

    The downside: price per social account. Buffer’s Essentials plan starts at $6/month for one channel. Add a second channel and you’re at $12. A third puts you at $18. If you’re managing a personal brand across Twitter, LinkedIn, and Instagram, you’re paying $216/year before you unlock any team features or advanced analytics.

    Buffer also caps scheduling slots. The Essentials plan lets you queue up to 10 posts per channel. If you batch-create content once a month, you’ll need the Team plan at $12/channel—$432/year for three accounts.

    Best for: operators who post infrequently, value interface speed over bulk features, and manage one or two accounts.

    Skip if: you’re scheduling more than ten posts per channel at a time or running multiple brands.

    Publer: bulk upload and recycling at a flat rate

    Publer’s killer feature is its bulk CSV upload. You can draft a month of posts in a spreadsheet, upload the file, and Publer maps the columns to post text, media URLs, and publish times. For operators who batch-create or repurpose content across networks, this cuts scheduling time from an hour to five minutes.

    The Professional plan runs $15/month and covers up to ten social accounts. That’s $180/year flat, regardless of whether you’re using three accounts or all ten. Publer also includes post recycling: you can mark evergreen content to auto-repost on a schedule you define. If you’re running a content site with a library of evergreen articles, recycling saves you from manually re-queuing top posts.

    The trade-off: the interface feels denser than Buffer. The composer has more fields, the calendar view packs in more data, and first-time users report a steeper learning curve. Publer also doesn’t support Instagram Stories natively—you’ll get a push notification to post manually.

    Best for: operators who batch-schedule in bulk, manage multiple accounts, or want to recycle evergreen content without manual re-queuing.

    Skip if: you post ad-hoc and prefer a minimal composer, or if Instagram Stories are central to your strategy.

    Later: visual planning for Instagram-first workflows

    Later built its reputation as an Instagram scheduler, and the visual grid planner still dominates the interface. Drag-and-drop scheduling lets you see how your feed will look before you publish. If brand aesthetics matter—if you’re running a design-driven account or a visual portfolio—Later’s grid view is unmatched.

    Later’s Starter plan is $25/month for one social set (one account per network: Instagram, Facebook, TikTok, Twitter, LinkedIn, Pinterest). That’s $300/year. You get 30 posts per profile per month, which works for most solo operators posting daily on one or two networks.

    The pricing jump is steep if you need more accounts. The Growth plan is $45/month ($540/year) for three social sets. If you’re managing a personal brand and a side project, you’re paying more than Publer’s ten-account tier.

    Later also limits link-in-bio tools to paid plans. The free plan doesn’t include Later’s Linkin.bio feature, which is one of the platform’s core value props for Instagram.

    Best for: operators whose primary network is Instagram, who value visual feed planning, and who post fewer than 30 times per month per network.

    Skip if: you’re managing multiple brands, posting heavily to Twitter or LinkedIn, or need bulk upload workflows.

    Pricing summary and decision matrix

    • Buffer Essentials: $6/month per channel. Best for 1–2 accounts, light posting.
    • Publer Professional: $15/month for up to 10 accounts. Best for bulk scheduling, multiple brands, evergreen recycling.
    • Later Starter: $25/month for one social set. Best for Instagram-first workflows and visual grid planning.

    If you’re running a single-brand operation posting sporadically, Buffer’s interface speed justifies the per-channel cost. If you’re batching content, managing multiple accounts, or recycling evergreen posts, Publer’s flat-rate pricing and CSV upload pay for themselves in time saved. If Instagram is your primary traffic source and you care about feed aesthetics, Later’s grid planner is worth the premium.

    One more thing: if you’re still deciding, subscribe to One Two Three Send for tool breakdowns like this every week—no fluff, just operator-to-operator breakdowns of what works.

    Heads up — some links in this article are affiliate links. If you sign up through them, we may earn a small commission at no extra cost to you. We only recommend tools we use ourselves.

  • Social media schedulers charge per account—here’s the math

    Social media schedulers charge per account—here’s the math

    Social media scheduling tools advertise starter plans at $10–$15 per month. That number holds only if you post to a single platform. Add Twitter, LinkedIn, Instagram, and a Facebook page, and the same tool bills you $40–$60 monthly—or forces you into a higher tier.

    The pricing structure isn’t hidden, but it’s rarely surfaced until you hit the connect-account screen. For solo operators running content-driven businesses across multiple channels, per-account billing turns an affordable utility into a recurring line item that rivals your hosting or email costs.

    How per-account pricing works across platforms

    Most scheduling tools define an “account” or “channel” as a single social profile. One Twitter account, one LinkedIn personal profile, one Instagram business account, one Facebook page—each counts separately.

    Buffer’s free tier allows three channels. The $6/month Essentials plan gives you one channel. To schedule across four platforms, you need the Team plan at $12/month per channel—$48 monthly for four accounts.

    Hootsuite’s Professional plan starts at $99/month for ten social accounts. If you manage fewer profiles, you’re still paying the base rate; there’s no cheaper tier that scales down.

    Later (focused on visual platforms) offers one social set per user on the Starter plan at $25/month. A “set” includes one profile per platform—Instagram, Facebook, Twitter, LinkedIn, TikTok, Pinterest, and YouTube. That’s better for multi-platform operators, but you’re locked into the bundle even if you only use three.

    Publer breaks the pattern slightly: the free tier supports one account per platform (up to three total), and paid plans at $12/month allow multiple accounts per platform for up to ten total social profiles. For an operator running personal and business accounts across Twitter, LinkedIn, and Instagram, that’s six profiles under one plan.

    When per-account pricing costs more than the tool’s value

    If your business generates revenue directly from social traffic—affiliate clicks, newsletter signups, course sales—the $50/month cost is defensible. But many solo operators schedule content as brand presence, not primary acquisition. In that case, you’re paying $600 annually to post three times per week across four channels.

    Compare that to native scheduling: Twitter, LinkedIn, Facebook, and Instagram all offer free post-scheduling inside their apps. The trade-off is context-switching and no unified calendar view, but the cost difference is $600 per year.

    For operators running a single content pillar across platforms—republishing the same blog post summary or newsletter link—per-account billing penalises efficiency. You’re doing less work (one piece of content, four destinations), but paying more than someone who writes custom posts for a single channel.

    How to audit whether you’re overpaying

    Pull up your scheduling tool’s billing page and count connected accounts. Then check your analytics for the last 90 days. For each social profile, calculate:

    • Monthly cost allocated to that profile (total bill divided by number of accounts)
    • Clicks or conversions attributed to that profile
    • Cost per click or cost per conversion

    If a profile costs $12/month and sends 30 clicks, you’re paying $0.40 per click before counting the time to create and schedule the post. If those clicks convert at 2%, you’re paying $20 per conversion from that channel.

    That math doesn’t mean the channel is bad—it means you should compare the cost to other acquisition channels (SEO content, paid ads, email) to decide whether the scheduling tool is worth keeping for that profile.

    Cheaper alternatives and when to switch

    If you’re overpaying for profiles that generate little return, three paths cut costs:

    Consolidate platforms. Drop the social profile with the weakest return. If Facebook sends five clicks per month and costs $12 in allocated scheduler fees, disconnect it and reallocate that budget.

    Switch to a per-user tool. Platforms like Publer or Buffer’s higher tiers charge per user, not per account, up to a cap. If you’re a solo operator, one seat with ten account slots costs less than per-account billing for four profiles.

    Use native scheduling. For low-frequency posting (once or twice per week), native tools cost nothing and require only a few extra minutes per session. Save the unified dashboard for high-volume operations where time savings justify the expense.

    One operator I know switched from Hootsuite ($99/month) to Publer ($12/month) and native LinkedIn scheduling for her personal profile. She posted to six accounts before; now she posts to five and saves $87 monthly. The profile she dropped—Pinterest—had sent 12 clicks in six months.

    Want more breakdowns like this? Reply with the tool or pricing structure you’d like examined next. We’ll pull the numbers and show you where the cost hides.

    Heads up — some links in this article are affiliate links. If you sign up through them, we may earn a small commission at no extra cost to you. We only recommend tools we use ourselves.

  • Publer’s Auto-Posting Queue: How Priority Slots Work and When to Use Them

    Publer’s Auto-Posting Queue: How Priority Slots Work and When to Use Them

    Publer‘s auto-posting queue doesn’t work like a simple calendar. When you schedule posts across multiple social accounts for the same time slot, the platform uses a priority system to decide what publishes first—and if you don’t configure it correctly, your most important content can get stuck behind low-priority filler.

    This matters when you’re juggling LinkedIn, Twitter, Instagram, and Facebook from a single dashboard. Each network has different API rate limits and posting windows. Understanding how Publer‘s queue prioritizes posts means the difference between coordinated launches and staggered, inconsistent publishing.

    How the Priority Queue Actually Works

    When you schedule multiple posts for the same timestamp, Publer doesn’t publish them simultaneously. It queues them according to three factors: account priority, post type, and API availability.

    Account priority is the setting most operators miss. In your workspace settings, each connected social account has a priority value from 1 to 10. When two posts compete for the same slot, Publer publishes the higher-priority account first. Default priority is 5 for all accounts, which means new users get effectively random ordering.

    Post type matters because different formats take different amounts of time to process. A text-only tweet publishes in under a second. A carousel post with eight images to Instagram takes 15–30 seconds because Publer has to upload media, wait for Instagram’s processing, then attach metadata. If you schedule both at 9:00 AM, the tweet goes live at 9:00:02 and the carousel lands closer to 9:00:35.

    API availability is the wildcard. LinkedIn’s API occasionally throttles requests during peak hours (weekday mornings in US time zones). Facebook’s API can reject posts if your page has recent policy warnings. When Publer hits a rate limit or error, it pauses that account’s queue for 60 seconds and moves to the next priority account. Your post still publishes—it’s just late.

    When to Adjust Priority Settings

    Most solo operators should set LinkedIn to priority 8 or 9, Twitter to 7, and Instagram to 6. LinkedIn drives the most referral traffic for B2B content businesses, so it should publish first when time slots overlap. Twitter comes next because it’s time-sensitive; a tweet posted 45 seconds late misses the algorithmic window for early engagement. Instagram posts have longer shelf lives and benefit less from split-second timing.

    If you’re running coordinated launches—a new course, a product drop, a newsletter issue—set all accounts to the same priority and stagger your scheduled times by two minutes. This forces sequential publishing and prevents API collisions. Schedule LinkedIn for 9:00 AM, Twitter for 9:02 AM, Instagram for 9:04 AM. You’ll see consistent publish times and avoid the queue lottery.

    For daily content that isn’t launch-critical, leave priorities at default and use Publer’s “optimal timing” suggestion feature. It analyzes your audience activity and shifts posts into lower-traffic API windows, which reduces queue conflicts organically.

    The Non-Obvious Tip: Use Priority Slots for Backup Accounts

    Here’s what most people miss: you can connect duplicate accounts with different priority levels to create a fallback system. Connect your primary Twitter account at priority 8, then connect a secondary Twitter account (a brand backup or personal account) at priority 3.

    Schedule the same post to both accounts. If your primary account hits a rate limit, suspension, or API error, Publer skips it and publishes to the backup account automatically. You don’t lose the time slot, and your content still goes live. This setup is especially useful for affiliate promotions or time-sensitive announcements where missing a window costs real money.

    The trade-off: duplicate posts count against your Publer plan limits. The $12/month plan includes 50 scheduled posts across all accounts. If you’re doubling up for redundancy, you hit that cap faster. Upgrade to the $29/month tier for 300 posts, or reserve backup posting for high-value content only.

    What Breaks and How to Fix It

    Publer’s queue log lives under Analytics > Post History. If a post doesn’t publish on time, the log shows the delay reason: API error, media processing timeout, or account priority conflict. Check this weekly, especially if you’re managing client accounts or running paid campaigns.

    The most common failure mode: Instagram carousel posts scheduled during API maintenance windows (usually Sunday mornings, 2–4 AM Pacific). Instagram’s API goes read-only during maintenance, and Publer can’t upload media. Your post fails silently unless you enable push notifications for publishing errors. Turn those on in Settings > Notifications > Publishing Alerts.

    If you’re publishing to Facebook Pages, verify your page token hasn’t expired. Facebook tokens reset every 60 days, and Publer doesn’t always surface the error clearly. You’ll see posts stuck in “Pending” status in the queue, but the error log just says “Authentication failed.” Reconnect your Facebook account in Settings > Social Accounts > Facebook > Reconnect, and past posts will retry automatically.

    Want to see more tool breakdowns like this? Reply with the platform or feature you want dissected next—we’ll add it to the rotation.

    Heads up — some links in this article are affiliate links. If you sign up through them, we may earn a small commission at no extra cost to you. We only recommend tools we use ourselves.

  • LinkedIn newsletters: when to publish there vs. your own list

    LinkedIn newsletters: when to publish there vs. your own list

    LinkedIn launched native newsletters in 2021, and they’ve quietly become one of the better ways to grow a professional audience without paying for ads. But they’re not a replacement for an owned email list—they’re a different tool with different trade-offs.

    If you’re running a content business, you probably need both. The question is which one gets your best material, and when you should cross-post versus publish exclusive content on each platform.

    How LinkedIn newsletters actually work

    A LinkedIn newsletter is a recurring publication tied to your personal profile or company page. When you publish an issue, LinkedIn notifies subscribers and pushes it into the algorithmic feed for non-subscribers who follow related topics.

    That second part is the big difference. A traditional email newsletter only reaches people who opted in. A LinkedIn newsletter can reach tens of thousands of impressions on the first issue if LinkedIn’s algorithm decides your topic has momentum.

    Subscribers get an email notification (from LinkedIn, not you) and a bell icon alert. You don’t own the email addresses. You can’t export them. You can’t segment, tag, or automate follow-ups. LinkedIn owns the relationship.

    Publishing cadence matters more here than on a self-hosted list. LinkedIn rewards consistency—weekly or biweekly posts perform better than monthly because the algorithm favors active publishers. Miss three weeks and your next issue will get buried.

    When LinkedIn newsletters win

    If you’re starting from zero and need fast traction in a B2B niche, LinkedIn newsletters are hard to beat. You can get your first 500 subscribers in a month without spending a dollar, especially if you’re writing about SaaS, freelancing, recruiting, or professional development.

    The platform is also ideal for reach-focused content that doesn’t require a hard conversion. Thought leadership posts, contrarian takes, and industry commentary all perform well because LinkedIn’s feed amplifies debate and engagement.

    One operator I know runs a DevOps newsletter entirely on LinkedIn. He hit 12,000 subscribers in six months, gets 40–60 comments per issue, and converts readers into consulting clients through DMs. He’s never sent a traditional email newsletter and doesn’t plan to.

    His model works because his business relies on visibility and inbound leads, not product sales or affiliate revenue. LinkedIn’s algorithm does the distribution work for him.

    When your own list wins

    If you’re monetizing through sponsorships, affiliate links, paid subscriptions, or product launches, you need an owned list. LinkedIn doesn’t let you run third-party ads in newsletters, and their affiliate link policies are murky at best.

    You also can’t A/B test subject lines, track click-through rates by segment, or automate a welcome sequence. LinkedIn’s analytics show opens, clicks, and basic demographics, but you can’t funnel readers into a product waitlist or tag them based on behavior.

    Control matters more as your business matures. Platforms change policies, shut down features, or deprioritize content types without warning. In 2023, LinkedIn throttled newsletter reach for accounts that cross-posted identical content from Substack or Beehiiv. The algo spotted duplicate intros and punished them.

    If your revenue depends on email, you can’t afford that risk. One algorithm shift shouldn’t kill your income.

    The hybrid approach that works

    Most operators I know who do this well publish different content on each platform. LinkedIn gets the high-level, debate-worthy stuff—opinion pieces, trend commentary, and open-ended questions. The owned list gets tactical how-tos, product updates, and anything with a monetization angle.

    You can also use LinkedIn as a top-of-funnel tool. Publish a condensed version of your best content there, then link to the full piece on your site or in your email archive. Include a low-friction CTA at the end: “I send a deeper dive every Thursday—join 3,200 operators here.” Link to your signup page.

    That approach works because LinkedIn subscribers are already in consumption mode. They’re not cold traffic. A 2–5% conversion rate from LinkedIn newsletter subscriber to owned-list subscriber is realistic if your CTA is clear and the value proposition is obvious.

    One workflow: write your main newsletter issue in Beehiiv or MailerLite, pull the intro and one key section, rewrite it for LinkedIn’s feed tone (more casual, more debate-friendly), publish it as a LinkedIn newsletter, and link back to the full version. Track conversions in your email platform to see if the crossover is worth the extra 20 minutes per week.

    Don’t post identical content on both. LinkedIn’s algorithm will bury it, and your email subscribers will feel like they’re reading reruns.

    Want to compare email platforms for your owned list? We covered ConvertKit vs. Beehiiv vs. Substack in detail last week, including pricing breakpoints and feature gaps that matter for monetization.

    Platform lock-in is real

    The biggest long-term risk with LinkedIn newsletters is that you’re building on rented land. LinkedIn could sunset the feature, change the notification system, or require a paid tier to reach your own subscribers. It’s happened before on other platforms.

    If LinkedIn newsletters are your primary audience channel, set a reminder every quarter to test a migration offer. Send one issue with a clear ask: “I’m testing a standalone email list—if you want these posts delivered outside LinkedIn, sign up here.” Track how many people convert. If it’s under 1%, you’re locked in. If it’s over 5%, you have options.

    The goal isn’t to abandon LinkedIn—it’s to make sure you’re not hostage to it.

    Heads up — some links in this article are affiliate links. If you sign up through them, we may earn a small commission at no extra cost to you. We only recommend tools we use ourselves.