Skip to product overview

Message your users in seconds.

Write it, publish it, and it is live in the app.

Groceries
REACH · 41,209 USERS
Draft
Delivered · 0 Impressions · 0 Taps · 0
In-app content management

The orchestration layer
for in-app content.

Marketing teams ship in-app banners, offers, and campaigns in minutes. One engineering integration up front. After that your team publishes content changes without a new app build and without a new app store submission.

Built for product and growth teams in
One platform · every touchpoint

Everything your app says, one control deck.

One workspace · every customer touchpoint

Control every in-app moment
from one place.

Update blocks, launch campaigns, define audiences, and manage localization without waiting for the next release. Every change is approved, tracked, and reversible.

See your first update go live
01 · Dynamic Blocks

Change any in-app surface.
Publish in seconds.

Turn home-screen heroes, promo cards, and onboarding messages into controlled blocks your team can update safely, without rebuilding the app.

  • Live in seconds, pushed straight to running apps
  • One-click rollback with full version history
  • Approvals built in: editors submit, admins ship
Create your first block
app.contentflow.click

Blocks

Home hero
Cashback promo
Onboarding
LIVE

Cashback

Cashback is back

Earn 5% back on every purchase through the end of the month.

Check eligibility
v14 · edited 2s ago Publish
02 · Publish

Live in seconds, not sprints. Change the message, hit publish, and watch it land in the running app.

Publishedno app release
2s
Cashback is backlive · 1 app
Rollback readyrevert in one click
9:41
Your appA
Cashback is backGet 5% back on groceries this month.Check eligibility
Updated 2 seconds ago
SAR 42 cashback earned this month
03 · Channels

Every channel, one block. In-app, Push, Banner, WhatsApp and SMS from a single source.

04 · Audiences Audiences that recompute. Segments update themselves as balances, behavior, and locale change.
LIVE REACHlive
41,209
N O H S +41k
05 · Residency
Riyadh · Alibaba Cloud HTTPS enforced PDPL-ready controls
06 · And the rest of the deck

Smaller features, same obsession.

Every limit, side by side
Approval workflowsEditors submit, admins approve. Nothing ships by accident.
A/B testingSplit any block or message, keep the winner.
Localization, 15+ languagesTranslate, review, and ship every language from one place.
PersonalizationMerge fields resolved per user, per send.
JourneysMulti-step lifecycle flows with triggers and waits.
Live analyticsClicks, conversions and funnels in real time.
Roles and workspacesInvite the team, scope what they can touch.
Version historyEvery change tracked, roll back to any version.
07 · Trust

Certifications and compliance

Our controls are built around the requirements of the Saudi PDPL. Backups are encrypted with AES-256 and restore-tested. HTTPS is enforced across the site. SOC 2 Type II and ISO 27001 are planned.

Data residency

Today ContentFlow runs as a single deployment on infrastructure located in Riyadh, Saudi Arabia, so production content and end-user data are processed in the Kingdom; that is a property of how we are currently deployed rather than a control the product enforces, encrypted backups and some third-party processors are handled outside the Kingdom, and an in-Kingdom-only arrangement is something we agree in writing on an Enterprise plan rather than something this page can promise.

Integrate once

One integration, up front. Then it's a publish button, not a release.

Paste the setup prompt into your AI coding agent, or follow the developer guides. Production integration today uses the REST API; native SDKs for React Native, iOS, Android and Web are in preview and are not generally available.

ContentFlow CLI npx @contentflow/cli init --ai

The CLI is built but not published to npm yet, so this command will not resolve today. The AI setup prompt tab works right now.

contentflow init
$ npx @contentflow/cli init --ai

Detected platform: react-native ("expo" found in package.json)

SDK key (ws_..._app): ws_..._app
Workspace id (ws_...): ws_...

[x] src/lib/contentflow.ts written
[x] .env.example updated (added EXPO_PUBLIC_CF_SDK_KEY, EXPO_PUBLIC_CF_WORKSPACE_ID)
[x] contentflow-setup-prompt.txt written

Verifying against https://app.contentflow.click/api/v1 ...

Handshake verified.
Workspace ws_... confirmed.
No published blocks found yet.

Next: open https://app.contentflow.click and publish a block to see it appear.
contentflow-setup-prompt.txt
Integrate ContentFlow (an in-app dynamic content platform) into this project.

My workspace credentials (already valid, use them exactly):
- API base URL: https://app.contentflow.click/api/v1
- SDK key (public): ws_..._app
- Workspace / tenant ID: ws_...

Build a small client module (no new dependencies): identify() handshake, sync() (handle the double data wrap), track() impression/tap. Render the first block as a card with a calm empty state until I publish, and re-sync on focus. Then run it once so identify() fires and remind me to hit PUBLISH.

The version in your dashboard is pre-filled with your real keys.

Quickstarts, SDK references, CLI, and API docs. Clear implementation guides for the REST API today, plus previews for React Native, iOS, Android, and Web SDKs and practical CLI recipes. Enter the dev hub

Today: production integration uses the REST API. Native SDKs for React Native, iOS, Android and Web are in preview and are not generally available. The @contentflow/cli package is not published yet.

App store review: publishing content through ContentFlow does not require a new build or a new store submission. Any change to your app's own code still goes through Apple and Google review, and remotely delivered content has to stay inside the purpose your app already declares and the store policies that apply to it.

Offline: with no network the app renders the fallback content compiled into your build. No ContentFlow change can reach a device that is offline, and a device that has never reached us has nothing of ours cached.

One engineering integration up front. After that your team publishes content changes without a new app build and without a new app store submission. Read the developer docs

Simple pricing

Start free. Scale with your audience.

Swipe to compare plans, or open the full breakdown for every limit.

Plan · 01

Free

$0USDforever

Must-have features to ship your first controlled in-app campaigns.

Includes:
  • Dynamic blocks: unlimited
  • MAUs: up to 10,000
  • Active campaigns: up to 5
  • Team seats: 1
  • Channels: Banner, In-App, Push
  • Languages: 2
  • Analytics: basic
  • Impressions: unlimited
  • Support: community
Plan · 02

Enterprise

Custompricing

For regulated teams with custom infrastructure, data, and governance needs.

Everything in Free, plus:
  • Dynamic blocks: unlimited
  • MAUs: unlimited
  • Active campaigns: unlimited
  • Team seats: custom
  • Channels: all + raw export/API
  • Languages: unlimited
  • Analytics: advanced + audit logs + compliance export
  • Impressions: unlimited
  • Support: dedicated CSM
Full plan breakdown Every limit, every feature, side by side

The Free plan is for evaluation. Our terms do not permit real production, personal or regulated end-user data in evaluation or sandbox environments, so a pilot carrying real customer data runs under a signed agreement.

Paid plans are charged in Saudi riyals. Our receipts are payment receipts and are not tax invoices today.

Common questions

What teams ask before they switch.

Ready when you are

Your next app update
doesn’t need a release.

Start free without a credit card. Talk to us if you need Enterprise controls.

  • First block rendering in about 10 minutes once your key is in place
  • Data residency, explained
  • Approvals and audit history
  • One-click rollback