AI AgentPlatform
PricingSign inBook a demo
Personyze
Pricing
APIs, SDKs & automation

Your stack calls it.
Or it calls your stack.

One REST API over every object in the account, server-side SDKs for Node, PHP and Python, native mobile SDKs, a client-side JavaScript API, and an MCP server for assistants. Then automation rules and scheduled reports that keep running when nobody has the panel open.

1One ID, on your site
RESTSERVER-SIDE
NorthwindStart free
A team at work
For teams over 200

Volume pricing, not the starter plan.

You looked at Enterprise twice this week. Here is what it costs at 240 seats.

See your price
Picked for your teamBecause you are evaluating Enterprise
How Aventis rolled out to 900 seatsCase study
How Aventis rolled out to 900 seats
SSO, SCIM and the security reviewFor your IT team
SSO, SCIM and the security review
Onboarding 200 people in a weekGuide
Onboarding 200 people in a week
Marco Reyes
Marco ReyesThird visit · trial ends Fridayviewed Enterprise240 seatsno card on filevis_8f21c6

Decided on your server before the page painted — Marco never saw the starter price.

2The same ID, in your app
NATIVE SDKiOS / ANDROID
A rack of servers
Your serverAnswered in 40ms, from your own data centredecide(user)node / php / pythonplan: "volume", seats: 240
one https call
9:41
Northwind
For your team size
Volume pricing for 240 seats
The offer you were reading last night.See the quote
Seats in use240
Your account managerRosa
HomeUsageBillingYou
Marco Reyes
Marco ReyesOpened the app 8:10am, on the trainsame visitorsame decisionvis_8f21c6

The same decision, asked for by the phone — no webview, and the engine is your own server.

3Agent to agent
MCPOAUTH 2.1
Your assistantPersonyze MCP · connected

Whose trial ends this week with no card on file?

personyze › list_visitors3 matched · 240ms

Three, and Marco Reyes is the one worth a call today — third visit this week, already priced at 240 seats, and his trial ends Friday.

Marco ReyesFriday · 240 seatsvis_8f21c6
Priya RaghavanFriday · 40 seatsvis_1c07ba
Tom OkaforSunday · 12 seatsvis_4de920
read + write, scopedyour permissions, revocable in one click

The same decision, handed to an assistant — over an open protocol, not a scraped screen.

4To your team
AUTOMATION RULEWEBHOOK
#new-businessAutomation rule
Marco Reyes

Marco Reyes looks ready to buy.

Third visit this week, priced at 240 seats, still no card on file — and his trial ends Friday.

trial ends in 2 daysviewed Enterprise twiceno card on file
Open his account
POST /your-webhookfired by a rule, with nobody watching the panel
The rule that fired
trial ends in 2 daysandviewed Enterpriseandno card
Checked every hour. Nobody had the panel open.
Rosa Ibarra
Rosa IbarraAccount manager · nudged three minutes latera name, not a report

The same decision, one last time — as a reason for the person who could pick up the phone.

5And which one won
A / BSCHEDULED REPORT
NorthwindOverviewCampaignsExperimentsReportsSettings
Enterprise pricing test
Variation A
You are 40 seats past GrowthHere is what it costs to stop worrying
4.1%to quote
WinnerVariation B
Volume pricing for 240 seatsThe plan for teams your size
6.8%to quote
+66%2,140 visitors · 97% confidence · called on day 6significant
personyze.decide(user)serves the winner from here on, with no redeploy
Scheduled reportMonday 08:00 · to 4 people, without anybody exporting it
48quotes generated+22%11trials converted+4$18,400new revenue+31%

The same decision, tested and counted — one winner, served by every caller at once.

One engine, many callers

Call it from anywhere. Same decision.

The audience model, the targeting and the reporting are the ones the panel uses. What changes is who asks and what renders the answer.

From your own serverOne call back, and you render it — no browser involved
From inside your appThe same decision, as JSON, on iOS and Android
From an assistantThe same objects again, this time as tools
Your server asks
POST /rest/decide { "user_id": "u_8241", "session_id": "s_5f3a91", "page": "/pricing" }
The caller supplies the id and carries the session. It times out after 90 minutes.
Personyze answers
{ "actions": [{ "audience": "Enterprise, evaluating", "show": "pricing-cta-b", "goal": "demo_request" }], "dismissed": ["welcome-bar"] }
Which audience matched, what to show, what was already dismissed. You render it.
Rendered by your app
Native iOS, Android and React Native, each with its own tracker, condition and action APIs.
Same endpoint, same shape
{ "actions": [{ "type": "card", "slot": "home_top", "items": [ … ] }] }
No webview and no HTML. The app gets JSON and draws it in its own components, so it still looks like your app.
Your assistantConnected over MCPread + write, scoped
Which campaigns lost traffic last week, and what should I test next?
get_traffic_analyticsThree lost ground, and pricing lost the most. It is also the page your Enterprise audience lands on most often. It can draft that test and push it to staging without anybody opening the panel.
Pricing page−18%
Checkout−12%
Category−6%
The same objects the REST API exposes — this time as tools, with the permissions you granted.
SDKs and endpoints

Three ports of one endpoint.

Server-side, in the app, or in the page. Pick the one that fits where the decision has to land.

Server-side

Node, PHP and Python

One JSON endpoint with three ports. The caller supplies the user id and carries an opaque session id, so it works for a kiosk, a set-top box, or a page your framework renders before a browser ever sees it.

decide()identify()track()
Mobile

iOS, Android, React Native

Native SDKs with their own tracker, condition and action APIs — the same audiences and the same goals as the website, returned as JSON your components draw.

trackerconditionsactions
In the page

Client-side JavaScript API

Read the profile, fire a goal, ask for a decision or re-run a placement from your own script — useful when the page is a single-page app and nothing reloads.

profilegoalsplacements
1,500+

Brands running Personyze in production

4.6/5
G2CapterraCrozdesk

Average rating on G2, Capterra & Crozdesk

No exports

No nightly sync, and no second copy of the profile drifting out of date

One key

Everything the panel edits, over one endpoint.

Not a read-only feed of what happened. The same objects, created and changed from your own code.

CAMPAIGNS · ACTIONSreadcreatechange

Everything the campaign screen edits, from your own code.

Create a campaign, add actions to it, change their content and switch them on. These are the same records the panel writes, with the same versioning underneath, so an edit made by a script is recoverable exactly like one made by a person.

What you can do4
  • Create a draft and leave it off until somebody has looked at it.
  • Replace content on one action without touching the campaign around it.
  • Switch traffic between variations, or hand the split to the engine.
  • Duplicate a campaign into another account you own.
Worth knowing2
  • Versioning is per action — a content change creates a version, and the live one is the one visitors get.
  • Raw database writes never replicate — go through the API or the panel, or visitors keep seeing the old content.
GET POST PUT /rest/campaigns
AUDIENCES · MEMBERSreadcreatechange

Segments you build, or segments you feed.

An audience can be a set of conditions the engine evaluates, or a static list your own system keeps in step by adding and removing members as people qualify. Both kinds target anything on the platform.

What you can do3
  • Define conditions over behaviour, CRM fields, geography, device or cart value.
  • Push members one at a time or in bulk, and remove them when they no longer qualify.
  • Group pages so a rule means "the pricing pages" rather than a list of URLs.
Worth knowing2
  • A static audience is yours to maintain — nothing expires members for you.
  • Conditions are the panel’s conditions — the same operators, so a segment reads the same in both places.
POST /rest/audience_members
VISITORS · FIELDSreadcreatechange

One profile, whoever asks for it.

Read a profile, write your own fields onto it, or hand the engine an identity from your CRM so the website, the app, the email and a webhook are all talking about the same person rather than four anonymous sessions.

What you can do3
  • Identify a visitor with your own user id or an email hash.
  • Write custom fields onto the profile — plan, seats, renewal date, anything your system knows and the browser does not.
  • Read the profile back to decide something in your own code.
Worth knowing2
  • The identity is the join key — pass the same one everywhere and there is one profile; pass different ones and there are several.
  • A server-side session runs 90 minutes from the last call, keyed by that identity.
POST /rest/identify
PRODUCTS · ARTICLESreadcreatechange

Your catalogue, ranked for one person.

Push products or articles, keep prices and stock current, and let the recommendation engine rank against what you actually sell today rather than a nightly export of what you sold yesterday.

What you can do3
  • Upsert items with your own attributes, not just a title and a price.
  • Update stock and price on their own, without resending the catalogue.
  • Point at a feed and let it refresh on a schedule instead.
Worth knowing2
  • Out of stock is a filter, not a delete — the item keeps its history, so it ranks again the moment it is back.
  • Articles rank with the same engine as products, so content and commerce sit in one widget when you want them to.
PUT /rest/products
GOALS · CONVERSIONSreadcreatechange

What counts, reported from where it happens.

Define what a conversion is, then report one from your server when it happens somewhere the browser could never have seen it — a phone order, a signed contract, a refund that should take one back off the board.

What you can do3
  • Report a conversion with a value and a currency, from any caller.
  • Attribute it to the visitor identity you already pass everywhere else.
  • Read goals back so your own dashboard and ours are counting the same thing.
Worth knowing2
  • A goal reported twice counts twice — send your own idempotency key if the caller might retry.
  • Revenue is optional but it is what turns an A/B result into a number somebody outside marketing will act on.
POST /rest/goal_reached
REPORTS · ANALYTICSreadcreatechange

The same numbers the screens show.

Campaign performance, traffic, product statistics and A/B results, with the metric definitions the panel uses. Pull them on demand, or have them sent on a schedule to people who will never log in.

What you can do3
  • Pull a report by id, for any range the screen offers.
  • Schedule one daily, weekly or per campaign, to a list of addresses.
  • Read A/B results including confidence, so your own tooling can decide.
Worth knowing2
  • Read-only, on purpose — numbers are derived, so there is nothing here to write.
  • Definitions match the panel — a figure you pull is the figure somebody else sees on the screen, which is the whole point.
GET /rest/reports/:id
It keeps running

Rules, tests and reports that do not need you.

The parts that should happen without anybody deciding to make them happen — and the winner going live on its own once it is a winner.

Automation rules

When this, then that

Watch a segment, a goal or a feed and act on it — switch a campaign on, move somebody into a list, fire an event to your analytics. The rule runs on the schedule you set rather than when somebody remembers.

triggersconditionsactions
Scheduled reports

It arrives before the meeting

The report you would have exported, sent on a schedule to the people who ask for it — with the same breakdowns and the same metric definitions as the screen it came from.

dailyweeklyper campaign
Experiments

Two versions, one winner

Split traffic across variations, watch the numbers where you already watch them, and let the engine serve the winner once it is sure. Every caller starts serving it at the same moment — nothing to redeploy, nothing to remember.

splitsignificanceauto-serve
Assistants

Or let an assistant do the asking.

The MCP server puts the account behind an open protocol, so Claude, ChatGPT or any MCP client can read it and change it in conversation — with the permissions you granted, and revocable on its own.

MCP

Ask it about the account

“Which campaigns lost ground this month?” — and it reads the same performance numbers the panel shows, rather than a screenshot of them.

MCP

Have it build the draft

A campaign draft, an audience from a description, a page group, a goal. It comes back as a draft you open and check, not something already live.

MCP

Let it act on what it found

Move somebody into an audience, switch a campaign on, change a piece of content, open a support ticket — each one a tool it had to be granted.

Access

Two ways in, revoked separately.

What authenticates a server is not what authenticates an assistant, on purpose.

For your own codeA server-side API key
LivesOn your server, never in a page
ReachesEvery object in the account
RolledWithout touching your code paths
For an assistantAn OAuth 2.1 grant
LivesWith the MCP client, never with you
ReachesOnly the tools you allowed
RevokedOn its own, without rolling the key
Either way, a server-side decision runs in a 90-minute session window keyed by the identity you pass — so a phone, a page and a webhook can all be the same visit.
Questions

The things people ask before they wire it in.

Answered the way they would be on a call.

Do I have to use the JavaScript tag at all?

No. The REST API and the server-side SDKs make a decision from your own server and hand you the content to render — nothing has to run in the browser. Most accounts use both: the tag for the behavioural signal, the API for the decisions they want to own.

How does the same person stay the same person?

You pass an identity — your user id, an email hash, whatever your system already calls them. Every caller that passes the same identity reads and writes one profile, which is what stops the website and the app from making two different offers.

Can I create campaigns through the API, or only read them?

Both. Campaigns, actions, audiences, goals, catalogs and page groups can be created and changed, not just listed. Content changes go through the same versioning the panel uses, so a bad edit is recoverable.

What happens if your service is slow or unreachable?

A server-side call is yours to time out. Set a budget you are comfortable with, fall back to your default content when it is exceeded, and the page still renders. Nothing about the decision is load-bearing for your own rendering.

Is MCP a different product from the API?

No — it is the same account behind an open protocol. The tools an assistant sees map onto the same objects the REST API exposes, with permissions you grant and can revoke separately from your API key.

Do automation rules and scheduled reports need somebody logged in?

That is the point of them. Rules evaluate on their schedule and reports send on theirs, whether or not anybody has the panel open.

Get started

Wire it in once. Call it from everywhere.

Start with the REST API and add the pieces you need — server-side SDKs, the mobile SDKs, the MCP server, rules and reports. Nothing here is a different product; it is the same engine, answering a different caller.

14-day free trial · No credit card · Docs are public