Blogs

Run a blog without running a CMS. Write posts in your dashboard, schedule them, grow an email list, and embed the whole blog on any website with one line of code.

Overview

The Blogs service gives you:

Write a post

  1. Blogs → New Post. Add a title - the slug is auto-generated (you can edit it).
  2. Write the body in the editor. Use the toolbar to insert headings, bold, lists, quotes and links. Content is sanitized automatically.
  3. Add a cover image - upload one or paste a URL - plus a category and tags.
  4. Fill in SEO & call to action (SEO title, meta description, social image, and an optional button label and link) if you want to override the defaults.
  5. Save draft - the right pane shows exactly how the post will look.
Reading time and the excerpt are filled in for you when left blank.

Write with AI

On the New post screen, click Write with AI to draft a complete, SEO-ready post from a short brief.

  1. Describe the post - a sentence or two on what it should cover.
  2. Pick a tone (built-in or one of your own custom tones) and a length (short, medium or in-depth).
  3. Pick a writing template - see the formats below.
  4. Leave Add images ticked to have images placed in the post. Choose Free photos or AI generated, whether to add a Cover image, and how many images go across the body sections.
  5. Optionally tick one or more Knowledge Base collections so the post is grounded in your own content (needs Knowledge Hub).
  6. Click Generate. A progress panel shows each step turning green as it completes - writing, image generation, then finishing.

The assistant fills the title, URL slug, subtitle, excerpt, body, category, tags, SEO title, meta description and image alt text - all written with search and answer-engine (SEO/GEO) best practice in mind. Everything stays fully editable; review and adjust before you publish. AI generation counts towards your plan's AI usage.

If the post already has content, you'll be asked to confirm before it is replaced.

Writing templates

Choose the shape of the article. Each template also decides whether the post ends with an FAQ section, so your blog is not eleven versions of the same page:

You can pick the template for a single post, set one for a whole plan, or override it on an individual topic inside a plan.

Comparisons, case studies and news updates stick to the facts you give them. Point them at a Knowledge Base collection or put the details in the brief, otherwise a case study is written as a clearly illustrative example rather than inventing a customer.

Set your AI writing defaults

Open Blogs → Settings → AI writing to control how the assistant writes for your whole workspace:

Plan ahead & auto-write

Instead of writing one post at a time, give SoftSolz your content plan and let it write each post for you before its date. You still decide what goes live.

Import a plan you already have

Keep your plan in a spreadsheet or a document? Upload it as-is.

  1. Blogs → Topics → Import plan.
  2. Drop in your file - CSV, Excel, Word, PDF, Markdown or plain text, up to 10 MB. Each row needs a topic; a short description and a planned publishing date are used when they are there. Column names do not have to match anything.
  3. Check what was read. Every topic, description and date is shown for you to correct, and you can drop any row that should not be there. A topic with no date is kept as an idea you can schedule later.
  4. Set the content options once - tone, length, writing template, images, model - plus the time of day to publish and how many days before its date each draft should be ready.
  5. Import. The plan appears under Topics as a group you can open at any time to see progress.
The file is read once to pull out your topics and then discarded. It is not stored on your workspace.

What happens next

Each post is written automatically a few days before its planned date (you choose how many) rather than all at once, so drafts arrive fresh and in good time. You get an in-app notification when a draft is ready to review.

Publishing stays manual by default. Every post waits as a draft until someone opens it, reviews it and clicks Publish. If you would rather not review each one, tick Publish automatically on the planned date when you import and posts go live on their own.

Automatic writing uses AI and counts towards your plan's AI usage, the same as writing a post by hand with AI.

Reading experience

Each post can show a table of contents, reader share buttons, the publish date and the reading time. Turn each one on or off per post in the Reading experience card on the editor.

Set your reading-experience defaults

Open Blogs → Settings → Reading to choose the defaults every new post starts with, and to pick which Share networks appear in the share bar. Changing a default only affects new posts; existing posts keep their own choices, which you can still change per post in the editor.

Share links open the live post when you set your Public blog URL under Blogs → Settings → Blog address; otherwise they fall back to the page the blog is embedded on.
Every option here is set in SoftSolz and applied on your embedded blog automatically - there is no code to change on your website when you turn something on or off.

Comments

Let readers comment on your posts. Each post has its own Allow comments toggle in the editor - that per-post choice is what decides whether the comment section shows on the embedded article, so you can open comments on one post and leave them closed on another.

Open Blogs → Settings → Reading to set the workspace defaults:

The Comments tab on Blogs → Posts lists posts with comments; the Moderate comments icon on a post opens its comments. You get an in-app notification for each new comment, and can Approve, Mark as spam or Delete each one.

Publish & schedule

Use Publish to go live immediately, or Schedule to pick a future date and time - the post publishes itself automatically. Unpublish moves a live post back to draft.

Avoid changing the slug after publishing - it is part of the post's URL and is referenced by your embedded blog and the read API.

Embed on your site

Open Blogs → Developer → Embed the widget. Under Public widget keys, enter your website address as the Allowed origin (for example https://example.com), click Generate key, and copy the key from the Save this key now window. Then copy the snippet:

<div id="softsolz-blog"></div>
<script src="https://app.softsolz.uk/softsolz.js"
  data-public-key="pk_live_…"
  data-service-id="blogs"
  data-mount="#softsolz-blog"></script>

It renders your published posts as a grid and opens each article in place - with its table of contents, share buttons, comments, related posts and the subscribe box, exactly as you set them in SoftSolz. It resizes to fit your page automatically, and anything you change in the dashboard shows up on your site without touching the snippet.

Put the snippet on a brand-new, blank page (for example /blog) - your posts render into that page. On a dark-background site, add data-theme="dark" to the script so the text stays readable. Blogs → Developer has a step-by-step installer and a ready-to-paste AI prompt.

Subscribers

Blogs → Subscribers lists everyone who signed up from your blog's own subscribe box, plus anyone you add manually. You can unsubscribe, re-subscribe, delete, and export the list to CSV. You get an in-app notification whenever someone new subscribes.

The subscribe box shows on your embedded blog when Subscribe box is on under Blogs → Settings → Reading. This is the blog's own list; the standalone Newsletter service keeps its own, and you can copy sign-ups across automatically - see below.

The Consent card under Blogs → Settings → Privacy controls how readers opt in and what you keep as proof:

Every subscriber gets a personal unsubscribe link. Anyone can use it to remove themselves without signing in, and to re-subscribe if they change their mind. Rows captured before you turned consent recording on show Not recorded - that is expected, and SoftSolz never backfills a consent record that was not actually given.

Send blog sign-ups to your newsletter

Turn on Copy subscribers to the newsletter (the Marketing list card under Blogs → Settings → Privacy) and every confirmed blog sign-up is copied into your Newsletter subscriber list, carrying its original consent record. Readers are never asked to confirm twice. The Newsletter service must be installed first.

Analytics

Blogs → Analytics has five tabs: Overview, Posts, Sources, Readers and Campaigns. Pick the dates at the top: 7 days, 30 days, 90 days, 12 months or your own dates. Turn on a comparison to set them against the period before or the same weekdays last year (52 weeks earlier, so a Monday is set against a Monday). The dates stay in the page address, so a link you share opens the same view.

The Overview tab shows views, reads, average read time and how many readers got to the end, each with its change, a chart of views against the comparison period, and your top posts. When Google is connected (see Google search per post), it also shows the Google searches that bring readers to your posts.

NumberWhat it means
ViewsEvery time a post was opened.
ReadsViews where the reader stayed on the post for at least a few seconds.
Read timeThe average time a read lasted.
Read to the endThe share of reads that scrolled at least three quarters of the way down the post.
Views count every opening of a post. Reads, sources and countries come from reader analytics, which is on by default (see Reader analytics and privacy).

How each post performs

The Posts tab lists every post with its views, change, reads, read time, scroll, read to the end and top source. With Google connected it adds Google clicks, impressions and average position. Search by title, or use the filters:

Click a post, or its Details button, to open its own report: a daily views chart, where its readers come from, their countries, and with Google connected, its Google clicks, the searches that bring readers, and Google by country.

Sources and countries

The Sources tab groups your readers by where they came from:

ChannelExamples
Organic searchGoogle, Bing and other search engines.
Paid searchSearch adverts.
SocialLinkedIn, Facebook, X and other social sites.
Paid socialSocial adverts.
AI assistantsChatGPT, Perplexity, Gemini, Copilot and Claude.
EmailLinks in emails and newsletters.
ReferralLinks on other websites.
Other paidOther paid links.
DirectTyped in, bookmarked, or no referring site.

Pick a channel to see its sources, with the campaigns under each source. Below, Countries lists views, reads and read time by the reader's country.

Google search per post

Blogs can show how each post does in Google search: clicks, impressions, average position, and the searches that bring readers. It needs three things:

  1. SEO Intelligence with your Google Search Console connected.
  2. The website your blog lives on added in SEO Intelligence.
  3. Your Public blog URL set under Blogs → Settings → Blog address, so each post can be matched to its address.

Google figures show to members who can also see SEO Intelligence and that website. Google publishes its figures about three days late, so the most recent days may have no Google data yet.

Reader insights

The Readers tab answers the marketing questions: where your readers come from, which campaigns bring them, and what actually turns them into subscribers.

Reader analytics and privacy

Reader analytics is on by default. There is nothing to add to your embed snippet. It is anonymous: it stores nothing on the reader's device and does not follow anyone between visits. The reader's country comes from their IP address, which is never stored; only the country code is kept.

To switch it off for the whole blog, turn off Count views and campaigns in the Reader analytics card under Blogs → Settings → Privacy. To switch it off on one website only, add data-analytics="off" to the embed snippet on that site:

<script src="https://app.softsolz.uk/softsolz.js"
  data-public-key="pk_live_…"
  data-service-id="blogs"
  data-mount="#softsolz-blog"
  data-analytics="off"></script>

Views are still counted either way; reads, sources and countries are not.

There are two levels, and the difference matters legally:

LevelWhat you getWhat it needs
Count views and campaigns (on by default) Views, reads and read time per post, the referring site (Google, LinkedIn, a partner blog), the campaign tag on the link, and the reader's country. Plus which of those sources actually produced subscribers. Nothing extra. It stores nothing on the reader's device and does not follow anyone between visits, so it needs no cookie banner.
Recognise returning readers All of the above, plus a reader's visits linked together. When they subscribe you can open their reading history and see what they read before signing up. Off until you turn on Recognise returning readers in the same card. Stores an ID on the reader's device, so this is cookie law. Your site must ask for consent first and call Softsolz.consent('granted') when the visitor agrees, and you must mention it in your privacy policy.
Readers whose browser sends a Do Not Track or Global Privacy Control signal are never tracked, whatever your settings say. Only the host of a referrer is stored (google.com), never the full URL, so a visitor's search terms are never recorded.

Open a subscriber's reading history from the book icon on Blogs → Subscribers. Deleting a subscriber deletes their reading history with them. Raw reader events are automatically deleted after 180 days; the summary counts are kept.

Track a campaign

Add campaign tags to the links you share and they show up in the Sources and Readers tabs and against every subscriber who signs up from them:

https://example.com/blog?utm_source=linkedin&utm_medium=social&utm_campaign=launch-week

The Campaigns tab builds these links for you: name a campaign once, then copy a ready-made link for every place you share it. It needs your Public blog URL first.

The tag on a sign-up works even with reader analytics off, because it travels with the sign-up itself.

Use the API

PathAuthWhen to use
Embed - widget endpoints pk_… public key (browser) The embedded blog and subscribe form on your site.
Server - GET https://app.softsolz.uk/api/v1/services/blogs/posts/published (one post: …/posts/published/<slug>) sk_… secret key (server) with the Read published posts scope Pull posts into a custom front-end or static-site build.

Keys with the right scopes can also create, edit and publish posts and manage subscribers. A key with the View posts, subscribers and analytics scope can read the same analytics as the dashboard for any dates: totals, every post, sources, and one post's report. Full reference: List published posts and the Blogs developer guide.

Test it step by step

Follow these steps once from start to finish to prove your blog works.

  1. Get access. You need the Super Admin or Admin role, or a custom role that includes the Blogs permissions, including publishing (Members & access → Roles).
  2. Pick where to test. To try things without touching your live blog, open the workspace menu and choose Switch to Sandbox mode. The sandbox has its own posts, keys and subscribers.
  3. Install Blogs. Open Marketplace, find Blogs and click Install. Blogs appears in the sidebar.
  4. Publish a test post. Go to Blogs → New Post, add the title "Hello from our blog" and a line of text, then click Publish. You see Your post is now live, and the post shows as Published on Blogs → Posts. Writing by hand costs no AI credits.
  5. Make a key for the Widget Tester. Go to Blogs → Developer → Embed the widget, enter https://developer.softsolz.uk as the Allowed origin and click Generate key. Copy the key from the Save this key now window.
  6. See it in the Widget Tester. Open developer.softsolz.uk/widget-tester and choose Blogs. In the Embed snippet box, replace pk_live_REPLACE_WITH_YOUR_KEY with your key and click Load widget. Your post appears as a card. Click it to open the article. If the subscribe box is on, subscribe with your own email: the address appears under Blogs → Subscribers.
  7. Put it on your own site. Make a new, empty page (for example /blog). Generate a second key with your own website address as the allowed origin, copy the snippet from Blogs → Developer, paste it into that page and publish it. Then set that page's address as the Public blog URL under Blogs → Settings → Blog address so share links open the real post.
  8. Check the numbers. Open the post on your site once, then look at Blogs → Analytics: the view is counted under Views on the Overview tab, and the Sources tab shows where it came from.
  9. Go live. If you tested in the sandbox, switch back with Switch to Live mode and publish your real posts and key there: sandbox posts and keys never carry over.

For developers

In the sandbox, open Blogs → Developer → Use the API, click New API key and tick Read published posts. Sandbox keys start with sk_test_. Then list your live posts:

curl https://app.softsolz.uk/api/v1/services/blogs/posts/published \
  -H "Authorization: Bearer sk_test_your_key"

The reply lists every published post (slug, title, excerpt, cover image and more) under data. See the API Reference for paging and the single-post call.

If something goes wrong

You seeWhat it means
Invalid embed key or origin not allowed. (inside the widget) The page address is not on the key's allowed origins, or the key was revoked. Generate a key for the exact address the page runs on, starting https:// with no path.
No posts published yet. Nothing is published in this workspace. Drafts and scheduled posts do not show, and a sandbox key only shows sandbox posts.
This blog isn't available right now. Please contact the site owner. Blogs is not active for the workspace, for example the subscription or free trial has ended. Check Manage subscriptions.
401 api_key_invalid or 403 missing_scope The key is mistyped or revoked, or it lacks the Read published posts scope. Create a new key with that scope ticked.

Common changes & risks