New integrations, schema changes, performance work, and the occasional bug we'd rather forget.
4.0.0
Dashboards: build your own board and get it by email or Telegram
Build a dashboard from KPI tiles, charts, tables, notes and target pacing, export it to a branded PDF, and have Level send it to your team on a schedule.
A report answers one question. A dashboard puts the numbers a team checks every Monday on one
screen — and with this release Level can deliver that screen to their inbox before anyone asks
for it.
Dashboards (Pro and above). A new section right under Reports. Put KPI tiles, trends,
breakdowns, tables, notes and target pacing on one board, every widget reading your ad accounts
directly, all of them driven by one period picker and one ad-account picker. Each widget loads
on its own, so one slow widget never holds up the rest.
One board for the numbers a team checks every week.
Eight starting points. Overview, E-commerce, Lead generation, Channel mix, Client report,
Segments, Awareness — or a blank board. A template reads your data the moment the dashboard is
created.
Pick the ad accounts and a template; everything can change later.
Drag and resize. Move a widget by its header, resize it from its right or bottom edge.
Nothing reaches your team until you press Save.
A widget editor that shows the widget as you build it. Settings on the left, the widget
itself on the right. Search the metric catalog, drag table columns into order, add a totals row
that counts every row rather than only the ones shown, draw a trend as a running total, pin a
widget to specific ad accounts, and color every series one by one or with a palette in one
click.
Every change shows in the preview right away.
Targets on a dashboard. Up to three targets from the Targets page — spend
on Google Search and leads on Meta, say — with the same pacing bars.
Tables of creatives (Business). The top ads by any metric, each with its type.
Sharing per role. Each dashboard gets Can view, Can edit or Full access per role, on a
new Dashboards tab in Users & Teams — the same way reports are shared.
Export to PDF. Your logo and accent color, an optional cover page with notes for the reader,
landscape or portrait. Download PDF, or Print… for a PDF with selectable text. The
branding belongs to the organization, so every export and every scheduled report looks the
same.
The real pages, with your branding, before you download them.
Scheduled reports (Business). Level turns a dashboard into a PDF every day, on weekdays,
every week or every month and emails it to the members you pick — the PDF attached, the key
numbers right in the message — and, if you like, posts it to the organization's Telegram chat.
When it goes out, what it covers, who gets it and what the PDF looks like.
Fresh data, or a clear note. A scheduled report waits for your ad accounts to finish syncing
the period it covers. If an account is still behind when the wait runs out, the report goes
anyway and names that account and when it last synced, so nobody reads an incomplete number as
final.
Recipients stay in control. Only members who can open the dashboard receive it, checked
again at every send. One click in the email unsubscribes, and a tab in your profile lists every
report you receive, with a switch for each.
A history of every send. Who received what, what went out with stale data, what failed —
and an in-app notification to the schedule's author when a send fails.
Health: what to fix comes first. In a check's details the problems come before the list of
what was checked, long lists fold, and landing-page links fit on one line, with tracking
parameters counted instead of printed in full.
Health: "Landing pages" is now "Links". The check covers every final URL of an active ad,
and its name now says so.
Access in the reports list. Reports you can only open are marked View only, and ones you
can change but not delete Can edit.
Forms take you to the problem. Saving a form with a mistake scrolls to the first field that
needs fixing.
Documentation for Dashboards. A new Dashboards section covers widgets,
sharing, the PDF export and scheduled reports.
3.13.0
Filter every report, and reports that open fast however large they are
The filter bar from the segment drill-down now works in all six reports, and filtering, sorting and paging moved to the server — a report with thousands of rows opens as quickly as one with ten.
Until now only the segment drill-down could be filtered, and a large report loaded every row
before showing any of them. This release brings filters to every report and changes how rows
reach the page: Level now sends the first page and loads the rest as you scroll.
Filters in every report. Segments, Campaigns, Months, Ad accounts, Videos and Creatives
all have the filter bar: combine conditions on the name, platform, campaign, ad type, segment,
group, month or any metric in the report, and match all of them or any. Save a set you use
often as a preset and apply it in one click.
Pick from a list, not by typing. Segments, groups, campaigns and platforms are offered as
a list of the values the report actually has. A long list stays responsive — type to narrow
it.
The reports list shows each report's type, so a Videos report and a Campaigns report with
similar names no longer look the same.
Large reports open in the time it takes to show one page. Filtering, sorting and paging
happen on the server: the table shows the first rows straight away and fetches more as you
scroll, without the table blinking or the totals above it flickering.
The segment drill-down stays smooth on big segments. Only the rows on screen are drawn,
so a segment with hundreds of campaigns and thousands of ads opens without stalling. Its
filter now sits above the summary cards.
Loading looks like the table it is loading. Reports and the drill-down show the table's
outline while data arrives, instead of a spinner followed by everything jumping into place.
Partnership ads are judged fairly. An ad made with a creator counts as the account's own
when either side of the partnership is the account, so a brand working with ten creators is
not flagged ten times.
Catalogs show how many live ads use them, next to their product count.
A call-to-action Level could not read is no longer reported as missing. Buttons on page
posts and in rotating Advantage+ formats are now marked as unread, and the summary accounts
for every ad.
Tables keep a usable height on reports with many summary cards above them.
3.14.0
Health at a glance: every account against every check
The Health screen shows ad accounts as a matrix or a sortable table instead of a long column of cards, so fifteen accounts fit on one screen and the one that needs you stands out.
With a dozen ad accounts, the Health screen was a long scroll of identical cards, each one a
column of green dots, to find the single account that needed attention. This release lays the
accounts out so the problems are what you see first.
Accounts as a matrix. One row per ad account, one cell per check. Healthy cells are a
quiet green and problems are amber or red, so a screen of fifteen accounts reads by its
exceptions. The last row counts how many accounts each check flagged: several flags in one
column usually mean one cause, such as a shared domain or a shared catalog. Hover a cell to
read what the check found, and click it for the details.
Every account against every check, worst accounts first.
Accounts as a table. Sort by health, name, share of checks passing or time of the last
check; see each account's spend and purchases at a glance; unfold a row into all of its checks.
Level remembers which of the two views you picked.
The table view, with one account unfolded.
Needs attention. One click hides every account with nothing to report.
Three kinds of grey are no longer one. A check with nothing to judge, a check that could
not run and a check you switched off each look different now. An account whose check could
not run is never shown as healthy.
One main button. Check now and the check settings are small icons on each account's row,
so the screen has a single main action, Check all now.
An empty findings list takes one line, not half the screen.
Documentation for Health. A new Health section explains the screen, every
check and what makes it flag an account.
3.8.0
Segment codes that apply themselves, and health findings you can actually work through
Save a segment code and your campaigns are sorted the same second, read fifty findings as three, and export a report in the order you sorted it.
Two things in Level made you wait for a background pass before they were true: a segment code
you had just changed, and a list of findings you had just read. This release removes both
waits — and the report you export now comes out in the order you were looking at.
Segment codes reach your campaigns the moment you save them. Change a code, clear one,
add one to a brand-new segment: the campaigns behind it are re-sorted straight away instead
of at the next data sync. The code was always the rule — now it is the rule that runs.
Assignments you made by hand stay yours. A re-match only takes back the links it created
itself, so a campaign you moved into a segment on purpose is never quietly moved back out.
If you do want a clean slate, Rebuild from codes starts over from the codes alone — it
discards hand-made assignments, so it asks first.
A refresh button for what happens outside Level. Campaigns renamed in Google or Meta stop
matching the code they used to match. One click on the segments page re-runs the codes across
the organization without touching anything else.
Run history shows what a past run found. Open any earlier run and read its findings, not
just whether it passed.
Fifty findings now read as three. Findings are grouped by the rule that fired — one
collapsible section per rule, with the campaign, ad set or domain shown per row — instead of
printing the same sentence fifty times with a different name on the end.
Check settings live in a proper dialog. Switches are a draft until you press Apply, and
you can copy one check's settings to your other accounts rather than the whole set.
Exported XLSX matches the table it came from. Sorting a Segments, Months or Groups report
by a metric used to be forgotten on export, and the file arrived in the report's own order.
Sorting a Campaigns, Videos or Creatives report now sorts the whole list, instead of
sorting separately inside each ad account and reading as a broken sort.
Meta campaign statuses update again. Meta began rejecting one of the values Level asked
for, which failed the status sweep for every account and left campaigns showing Unknown.
A failure like this is now reported instead of passing silently.
3.7.0
Health: two new Meta checks, and every check is now yours to tune
Turn any check off for one ad account, pin what the account is supposed to look like, and let Level watch the Facebook Page, the button and the product pages behind your ads.
Health has watched every connected ad account hourly since 3.3.0. This release makes it fit
the account instead of the other way round: checks that do not belong are gone, checks you do
not want can be switched off, and three checks now compare an account against what you say
it should look like.
Switch a check off for one ad account. Any check the account actually runs, from the
card itself — and the setting survives reloads and sessions. A check you switch off stops
running, leaves the counters immediately rather than at the next hourly pass, and stops
alerting. A check added to Level later still arrives switched on everywhere.
Apply the same set to your other accounts on that platform. One click copies this
account's on/off set to the rest. It replaces what is there, so the confirmation spells
out the difference per account — "Retention Meta: Spend back on" — instead of listing
names and letting you guess.
Identity (Meta). Critical when an ad runs with no Facebook Page at all; a warning when
Instagram placements have no Instagram profile, or when an ad runs under a profile the rest
of the account does not use. The case where an agency hands over a campaign still pointing
at its own page is exactly the one nobody notices for a month.
Call to action (Meta). A warning when an ad shows a button the rest of the account does
not, or no button at all. Which button suits which campaign is not judged — only that one
ad is the odd one out.
Pin what the account is supposed to look like. Identity, Call to action and the catalog
check each show what they found and let you pin the right answer. Until you pin anything,
Level compares ads against whichever profile or button most of them already use — and only
when there are at least three ads and 60% of them agree, so an account that deliberately
runs two brands is not reported as half broken.
The catalog check shows its working. It lists the catalogs and product sets actually in
use, each with its id, name and product count, and any of them can be pinned as expected. A
catalog nobody pinned but the ads use is a warning; until something is pinned, the check
stays quiet rather than guessing.
Landing pages are checked on catalog accounts too. An ad whose URL is a
{{product.url}} template used to be unverifiable, so it was skipped. Level now takes
twenty real product pages from the catalog behind it and checks those.
Three more ways a landing page can be broken — a deep link that quietly redirects to the
home page, a page that answers 200 while saying "not found", and a product marked sold
out. All three are warnings, never critical: they are judgement calls, and a judgement call
should not page you at 2am.
A card shows only the checks that run for its platform. The grey "Google only" rows are
gone — not hidden, but no longer produced at all. Not applicable now means only what the
check itself decided, such as "this account has no shopping campaigns".
A switched-off check cannot come back as "recovered". Its stored state is removed with
it, so the alerter has nothing to report a recovery from.
3.6.0
Campaign statuses, and report tables you can arrange
See which campaigns are actually running — and sort, reorder and resize the columns of any report, with your metric selections saved as presets.
Two things this release: the campaigns list finally says what each campaign is doing
on the platform, and every report table can be arranged the way you read it — sorted,
reordered, resized, and remembered.
Campaign status, straight from the platform. Every campaign now carries Active,
Paused or Ended as Google or Meta reported it at the last sync. A campaign the
platform stopped listing becomes Ended — its numbers stay in your reports, only the
badge changes.
The warning a badge alone would hide. A campaign that is Active while nothing
has been delivered for a week gets a warning triangle, and the list can be filtered
down to exactly those: No traffic 7d+.
Active, Paused, Ended — and the triangle for a campaign that says it is running while nothing happens.
Filter by status.Active, Paused, Ended or No traffic 7d+, applied on the
server so paging and counts stay honest. TikTok campaigns, and accounts whose first
sync has not finished, show a dash rather than a guessed badge.
Four ways to narrow the list, next to the search box.
Sort any report by any column. Click a header: first click high to low, second low
to high, a third puts the report's own order back. On Campaigns, Videos and Creatives
reports the sort runs on the server, so it covers every row rather than the page you
have already loaded.
One header, one click. The arrow says which column the table follows.
Drag columns where you want them. Drag a metric header sideways to reorder, drag
its edge to resize. Both are remembered per report, per person, and a Reset widths
button appears as soon as you have changed a width. Dragging a header edits the same
order the Customize Metrics panel does — there is one order, not two.
Metric presets. Save the metric selection you just built under a name and apply it
to the next report in one click. Two slots, kept per organization; saving under a name
you already used overwrites it.
Built the selection once — reuse it on the next report.
Custom metrics are formatted like what they are. A metric whose formula works out
to money is shown in the report currency, and one that divides keeps its decimals —
a Cost / Signups that used to read 37 now reads $37.00, and a Leads / Sessions
that read 0 now shows the fraction it actually is.
An invitation that could not be emailed says so. If the mail provider refuses the
message, Level now tells you the invitation was created and that Resend invitation
is the retry — instead of a generic failure next to an invitation that, in fact,
exists.
A segment with no campaigns reported the whole report's total. An empty segment now
shows zeros, which is what it has.
A campaign with no segments could take the campaigns page down. The list failed to
load rather than showing that campaign as unassigned.
3.5.0
The API can now write back
Segments, campaign tagging, targets and report definitions can be created and changed over the public API, behind their own write scopes.
Until now the public API only read. It still reads the same way — and on top of that,
the things you used to keep in step by hand can now be kept in step by the system that
already knows them: your CRM's taxonomy as segments, your media plan as targets, your
reporting structure as report definitions.
Thirteen write operations. Create, change and delete segments; assign them to
a campaign or to five hundred campaigns in one call; create, change and delete
targets, including a whole year's monthly grid; create, change and delete
report definitions; and link an ad account you have already connected. Every
one of them lives beside the read endpoint it belongs to, under /v1.
Write access is its own decision. Write scopes sit in their own group when you
issue a client, never mixed in with the read checkboxes, and a client issued without
them cannot change anything whatever it sends.
Write access is a separate group, with its own warning — and each scope is only offered to someone who already holds the matching permission.
A write acts as a person. A credential has nobody behind it, so every write acts
as the user who created the client, and Level re-checks that person's current
permission before the write lands. Someone who leaves the team, or loses a
permission, stops being able to write through the client they made — its reads carry
on untouched.
The list says who can write. A client holding any write scope carries a Write
badge, so one glance at the list answers "what in here can change our data?".
One badge, one question answered.
Retries are safe. Any POST may carry an Idempotency-Key. The same key with
the same request replays the original answer instead of creating a second segment;
the same key with a different request is refused outright.
Writes have their own hourly budget — 300 an hour on Business, 1,500 on
Enterprise — counted separately from reads, so a warehouse pull and a sync job cannot
starve each other.
Targets are readable over the API too (budgets:read), so a job can see the plan
it is about to change.
Errors say more. Four new problem types — a write refused because the creator's
permission is gone, a clash with something that already exists, an idempotency key
reused for a different request, and a permission check Level could not reach — each
with its own documented answer instead of a generic failure.
Everything above is in the API documentation, and the machine-readable
contract is served by the API itself at GET /v1/openapi.json. The public API is a
Business and Enterprise feature.
3.4.0
Custom metrics made simpler, ad-account reports build themselves
A custom metric now needs only a display name and a formula you can type with #, and an ad-accounts report builds its groups for you.
A custom metric used to ask for two names before you got to the formula, and the formula
wanted every metric spelled exactly as the system knows it. Both are gone: name the metric
the way you would say it out loud, type # to pick the metrics it is made of, and Level
takes care of the rest.
Custom metrics ask for one name. Type "Cost per Lead" and the system name used in
formulas — cost_per_lead — is written for you and kept unique across the organization.
In the formula, # opens a ranked list of your metrics right where the cursor is; a name
typed by hand is recognised whatever its case, and Ctrl+Z / Ctrl+Y undo and redo inside
the field instead of leaving it.
One name, one formula. The system name is derived, and # brings up the metrics as you type.
An ad-accounts report builds its groups for you. Pick the Ad accounts type on a new
report and Level offers a Total group with every ad account plus one group per account —
the shape almost every such report ends up in. Say yes and remove what you do not need;
say no and build it by hand as before.
Prefill is offered once, on a new report with no groups yet.The result: a Total row and one group per ad account, ready to reorder or trim. Clear all starts over.
Select all, clear all. Report settings show how many ad accounts are picked and toggle
them in one click; the same for groups.
Big totals fit their cards. Money from 1,000 up is shown without cents, and a value
too long for its card steps down a size rather than being cut off.
Whole-currency totals in the cards: $99,700, not $99,700.00.
Connection cards fit an agency. The list of advertising accounts under a connected
profile is a grid of up to three columns, so a profile with dozens of accounts no longer
runs past the screen.
Targets wrap long ad account names onto a second line instead of cutting every
"Google LSA - …" account to the same ellipsis.
Google and Meta account statuses read correctly again. Connected advertising accounts
were shown as disabled regardless of their real state.
3.3.0
Health: nine checks on every ad account, every hour
Level now watches your ad accounts the way you would on a Monday morning — account status, spend, conversions, delivery, landing pages, catalogs and creatives — and tells you the moment one of them breaks.
Most problems in an ad account are quiet. A card expires and the account stops delivering.
An ad is disapproved and the ad set keeps its budget but shows nothing. A landing page
starts answering 404 on a Friday evening. Nobody gets an error — the numbers simply stop.
Health looks for exactly that, on every connected account, every hour.
Nine checks per ad account. Account status and spend cap; today's spend against
yesterday's; purchases and revenue over the last 48 hours; delivery problems
(disapprovals, ad sets stuck in learning, budgets that ran out); dates left in campaign
names long after the campaign should have stopped; landing pages that answer with an
error, time out or point at a domain that is not yours; the product catalog behind
shopping campaigns; products with no impressions today; and creatives shown in
placements their aspect ratio does not fit — a 9:16 video cropped to a square in Feed.
The page opens on what is wrong. Open findings sit at the top, sorted by severity,
each naming the campaign, ad set or ad behind it with a link straight into Meta or
Google. Below them, one card per account shows all nine checks at a glance.
"Check now" re-runs one account or every account you have access to, without
waiting for the next hour — useful right after you launch a campaign or reconnect a
card.
Every check explains itself. Click one and you get the rule in plain words, the
entities behind the current finding, and the same check's result in every earlier run —
so you can see whether a problem started this morning or has been there all week.
Alerts where you already work. A check turning critical, or clearing again, reaches
your notification inbox and, if you have them connected, your Telegram or Slack channel.
A critical that stays open reminds you once a day and goes quiet the moment it is fixed.
A check that could not run — a landing page behind bot protection, a platform error, a
permission you have not granted — says so plainly instead of being counted as clear. An
account is only "healthy" when the checks actually ran.
Health covers Meta and Google ad accounts and is available on Pro and up.
3.2.0
Targets: plan any metric, not just spend
Budgets became Targets — set a monthly target on leads, revenue, purchases or a ratio like ROAS, pick which metrics you track, and read pacing that knows which direction is good.
A budget answers one question: are we spending what we meant to spend. Most teams plan
more than that — leads for the quarter, revenue for the month, a ROAS they promised a
client. Budgets is now Targets, and a target can sit on any metric you already report
on.
A target on any metric — Cost, Clicks, Impressions, Revenue, Purchases, Leads and
your own conversion metrics accumulate through the month against a plan, exactly as
spend always did. Ratios — ROAS, CPA, CPL, CTR, CPM — are planned as a level to hold,
and the actual is computed over the whole period rather than averaged day by day.
The metrics you track are yours to choose — "Manage metrics" opens a list with
checkboxes and a drag handle: tick what you plan for, drag it into the order you read
it in, apply once. Tracked metrics appear beside the grid on both Pacing and Plan. Cost
is always tracked. A metric with no conversion mapping yet says so and links to where
you set it up.
Pacing that knows which way is good — a revenue or lead target beaten early reads
green and says "Ahead"; only overspending a cost target is red. The wording follows the
metric: spent for cost, earned for revenue, reached for a count. Drift alerts follow the
same rule, so a good month stops arriving as a warning.
The bar shows how far past plan you are — once the actual passes the plan, the bar
stretches: the plan keeps its own solid stretch and everything beyond it is hatched, so
a target beaten by a quarter and one beaten six times over no longer look alike.
Remaining reads "0" with "over the plan by …" underneath instead of a negative number.
The year plan says what each row can do — Fill year, Copy to the next month and
Clear are buttons on the row rather than a menu you had to find. Ctrl+S saves the grid
from anywhere on the page.
Both target screens use the full width, and the metric you are on travels with you
between Pacing and Plan and is still there on your next visit.
A target carries the currency of its ad account. Cabinets in different currencies
are totalled per currency instead of being added up into one meaningless figure, and the
currency is shown next to the account.
3.0.0
Budgets, notifications and a public API
Plan and pace ad budgets month by month, get told when something needs you — in the app, Telegram or Slack — and pull your reports through a read-only REST API.
Three things people kept asking for landed at once: a place to keep budgets and see
whether spend is on track, a way to hear about problems without opening Level, and a
door for your own tools to read the same numbers your reports show.
Budgets and pacing — a new Budgets section (Pro and up). Set a monthly budget per
ad account or per campaign, see spend against plan with a projected month-end, and lay
out the whole year in a plan with drafts. Drifting far off plan raises an alert.
Notifications — an inbox at /notifications, a bell in the header with the unread
count, and settings by topic: billing, ad-account access, sync, invitations, budgets.
Level now tells you when a subscription is about to expire or gets locked, when an ad
account needs to be reconnected, when a sync fails or a backfill finishes, and when
someone invites you.
Telegram and Slack channels (Business and up) — connect a chat per organization in
the new organization settings, send a test message, and read the delivery history when
something does not arrive. The Telegram bot answers /id so you never hunt for a chat id.
Public API (Business and up) — a read-only REST API under /v1: organizations,
ad accounts, segments, campaigns, reports and their data, XLSX and CSV export, and the
metric catalogue. Authenticate with OAuth2 client credentials; create API clients with
scopes and an IP allow-list, see the secret exactly once, rotate or revoke at any time.
Hourly quotas: 1 000 requests on Business, 5 000 on Enterprise. Interactive docs live
at /v1/docs, a written guide in Docs → API.
Organization settings page — general details and notification channels on one
page, opened from the organizations list, instead of a modal.
Guided onboarding — new organizations get a short step-by-step path from the first
ad account to the first report.
SEO/SMM is now Wire — the section carries the product's name and was rebuilt: a
rail of linked projects on the left, the key metrics in one row, and a single chart for
the period. Old links redirect.
Navigation — the sidebar is about the organization you are in: ad accounts and
settings first, then the daily work. Account-level pages — organizations, connected
accounts, profile — moved into the profile menu. An organization now opens on its reports.
Profile — split into Account, Subscription and Notifications tabs.
Mobile — budgets and API clients read as cards, the Account section sits in the
menu, and dialogs no longer misbehave on small screens. Campaign budgets in pacing are
collapsed by default on a phone.
API client secrets never expire by default — set an expiry if your policy needs one;
otherwise rotate or revoke on your own schedule.
Live updates no longer go quiet — sync progress and other real-time updates now
reach every session regardless of which server it landed on.
2.3.0
SEO/SMM by group — and a Business home
Link a whole Wire group at once, read the analytics group by group, and follow any post straight back to Wire.
Most organizations don't track one site — they track a bundle of them. This release
teaches SEO/SMM to work that way, and settles the section into the Business plan.
Link a whole Wire group at once. Pick the group instead of adding its sites one
by one; projects already linked elsewhere are skipped rather than blocking the batch.
Scope switcher. Narrow SEO, Traffic, and Social to a single group — Wire's own
dedupe and impression-weighted position are computed over exactly that set, so a
group reads as its own truthful number, not a slice of the total.
Per-platform breakdown and a posts table on Social and Traffic. Every post row
deep-links to that post in Wire.
SEO/SMM is now part of the Business plan. On Free and Pro the section is hidden.
Nothing is thrown away: projects linked to an organization stay linked, and the
section returns the moment the plan does.
2.2.0
SEO/SMM grows charts — and account choice
The SEO, Traffic, and Social tabs now draw their trends, and connecting Wire always asks who you are instead of guessing.
The SEO/SMM section shipped two days ago with numbers; now it has their shape.
Charts on every tab. SEO draws clicks, impressions, and average position;
Traffic draws sessions and engaged sessions; Social draws your posting cadence —
each with a week-over-week badge so the direction is visible at a glance.
Link Wire under a different account. "Use another account" shows a sign-in
screen with every account this browser has used, instead of silently taking the
one you're in.
Connecting Wire is now guarded. If the sign-in session in your browser belongs
to someone else, you get the sign-in screen — rather than the wrong account linked
quietly.
Linked projects became compact chips, so the analytics start right where the
page opens.
2.1.0
SEO and social, straight from Wire
A new SEO/SMM section brings your organic search, traffic, and social numbers from Wire into Level — next to the ad reports they belong with.
Paid performance was never the whole story. Level now reads the organic side —
search, site traffic, social — from Wire, Marketing Bar's content platform,
and shows it inside the organization it belongs to.
A new SEO/SMM section. Link your Wire projects to an organization and see
their SEO, traffic, and social analytics without leaving Level — clicks,
impressions and average position; sessions and engagement; posts and their reach.
Connect Wire right where you use it. The connection lives inside SEO/SMM, not
on the Connected Accounts page — and reconnecting and disconnecting live there too.
Numbers that are whole, never double-counted. A project belongs to one
organization, and an organization reads Wire under a single account — so two
teammates can't accidentally count the same site twice.
Move projects to your account in one click. If something was linked under a
colleague's Wire account and they're away, take the linked projects over without
re-adding them.
Switch account from the profile menu — and stay signed in elsewhere. Level and
Wire keep separate sessions, so you can be a different person in each.
Sign-in settings, one click from your profile. Set a password, connect or
disconnect Google and Facebook — in one place, applying across Marketing Bar
products. Signing up with one and coming back with the other used to be a dead end.
2.0.0
One sign-in for Marketing Bar
Signing in moves to accounts.marketing-bar.com — one account across our products, and no more tokens sitting in your browser.
Signing in has moved out of Level and onto its own address:
accounts.marketing-bar.com. One account, one screen, across Marketing Bar
products — and a login that's now built to be handed the keys, rather than each
product minding them itself.
You'll be asked to sign in once after this release. That's expected: everyone
starts a fresh session on the new address.
A sign-in page of its own. Email and password, Google, or Facebook — from one
screen, at one address, whichever product you were heading for.
One account across products. Sign in once and you arrive already signed in
everywhere your account reaches, instead of a separate login per product.
Emails that know which product you're using. Confirmation and password-reset
messages are addressed from the product you signed up through, not always Level.
Your session no longer keeps access tokens in the browser. They stay on the
server, and the browser holds nothing but a session cookie it cannot read. Less
worth stealing, and nothing left behind in a tab you forgot to close.
Sign-in refuses where it used to let through. An account that's locked after
repeated failed attempts, or whose email was never confirmed, is now turned away on
every route in — including Google and Facebook, and including sessions that were
already open.
Being turned away now says why. Where a refused sign-in could look like a button
that simply did nothing, the page tells you what to fix — and an unconfirmed
account gets its confirmation link sent again.
1.5.0
Permissions that mean what they say
Ten permissions instead of twelve, each wired to something real — and deletion granted on the report or account it affects, not across the board.
Every switch in the role editor now does something, and its name says what. Two are
new, four are gone, and the most destructive ones are granted where they belong — on
the report or the account they affect.
Manage Report Access and Manage Ad Account Access — handing out access is
now its own job. An account manager can share cabinets with clients without
touching your team structure or rewriting roles; both used to be folded into Manage
Roles.
Manage Metrics & Conversions — the formulas your whole organization reports on
sit behind their own switch, rather than being open to everyone on the plan.
Assign Campaign Segments — an analyst can label campaigns day to day without
being handed the run of your segments.
Delete Segments — its own switch, nested under Manage Segments. Edit freely,
delete deliberately: a deleted segment drops its campaigns into Unknown, and only
hands put them back.
Full access — a third level on reports and ad accounts. Deleting is granted on
the one that matters, per report and per account, instead of as a licence to delete
anything.
Two sections instead of four — Administration for people and access,
Data & Reports for the work. Administration reads outward from the organization
to its people to what they see; Data & Reports follows the pipeline from source to
export.
Names describe the act — creating things is Create Reports and Create Ad
Accounts, because that is all they ever governed. What may be done to a report or
an account that already exists is answered by its access level, where you can see
it next to the thing itself.
New members start clean — a new member can build a report and export what they
were given, and nothing else. Everything beyond that is one checkbox away when your
team wants it.
Roles are sorted — Owner first, then by when they were created.
1.6.0
Broken connections speak up
A profile whose access was revoked now tells you so — instead of a report that quietly stops filling in.
A dead ad platform connection used to be something you discovered from a gap in your
numbers. Now the app says it first.
A revoked profile is flagged in the menu. When a platform stops accepting your
connection — access withdrawn, password changed, token expired — a red dot appears
where you'd look anyway, rather than the failure staying between the app and the
platform.
The ad account card offers Reconnect. Where it used to show a raw error dump
behind a Retry button that could never succeed — the token was dead, retrying it
changed nothing — there's now the one action that actually fixes it.
Sync no longer reports success when it fetched nothing. A run that came back
empty was counted as "Synced just now", so a connection could be broken for days
while the interface insisted everything was current. An empty run is now reported
as failed.
Disconnecting your own profile leaves your teammates' alone. The same Google or
Meta account connected by two people is two separate connections; removing yours no
longer breaks theirs.
1.6.1
Report dates read correctly again
Reports in the list showed 01 Jan 1970 instead of when they were actually created.
A small fix, but the kind that makes a list impossible to scan.
Report dates. Every report in the list showed 01 Jan 1970 rather than its
real date, so sorting by "recent" told you nothing and nothing looked trustworthy.
The dates are back.
1.3.0
Report access, now answered by role
Pick a role and see every report it can reach — report access is set in one place, with plain-language levels and an explicit save.
Report access used to answer only one question: who can open this report? Now it
answers the one you actually ask — what can this role see? Pick a role once, and
every report is right there.
Report access lives inside roles — it moved out of its own tab and into the
role you're already editing, next to Members and Permissions. Instead of opening
each report one by one to piece together what a role can reach, you pick the role
and see the whole picture at once.
Access levels say what they do — "None / Read / Edit" are now No access,
Can view and Can edit, each spelling out what it grants: viewing includes
exporting the data, and editing includes deleting the report.
Changes are saved when you say so — set access across several reports and save
them together, or discard them. Report access now works the same way as the role
permissions next to it, and a failed save tells you instead of quietly reverting.
The product tour no longer gets stuck behind a dialog — opening the avatar
cropper mid-tour left it dimmed and unclickable. The tour now steps aside while
you finish and picks up where it left off.
Ad account cards line up again — buttons and badges sit on the same line
across a row instead of drifting with the card's height.
1.3.1
Invitations that arrive, settings that stick
Invitation emails now link to Level instead of an internal address, report settings apply the moment you save them, and Avg. Lead no longer rounds down to zero.
A maintenance release, and every item here is something that should have worked
all along.
Invitation emails now lead to Level — the link was built from an internal
service address, so teammates you invited landed on something that couldn't
load. It now takes them straight to the invitation screen, and the link can no
longer be pointed at another host in transit.
Report settings apply the moment you save them — hide a metric, reopen the
report, and it was back: the change only took hold after a full page reload.
Saved settings now show up immediately, and so do the report's numbers for the
metrics you just turned on. Role permissions had the same lag, up to two
minutes, and are fixed with it.
Avg. Lead no longer rounds down to zero — it's leads per day, so 12 leads
over 30 days is 0.4, and anything under half a lead a day was shown as 0. It's
now displayed with decimals. CPL was rounded to a whole number and dropped its
currency symbol; it's now formatted as money. Both fixes carry over to the
Excel export, where the values were right but displayed the same way.
1.4.2
Ad account access, now answered by role
Share an ad account without sharing the rest — plus Meta profiles that renew their own tokens and say so before they expire.
Ad accounts used to be all or nothing: whoever could reach the organization could
reach every cabinet in it. Now access is granted per account, from the same role
editor you already use for reports.
Share one ad account, not all of them — invite a client, give them the accounts
that concern them, and everything else stays hidden. An account nobody granted you
is invisible rather than merely read-only.
Ad account access lives inside roles — pick a role and see every ad account at
once, next to Members and Permissions, instead of opening each account in turn to
work out what the role can reach.
Access levels say what they do — No access, Can view (the account and
its data) and Can control (view, plus starting and stopping data loading).
Changes are saved when you say so — set access across several ad accounts and
save them together, or discard them, exactly like role permissions next door.
Meta profiles renew themselves — tokens refresh in the background, and a
profile that has gone dead can be reconnected in place.
Token expiry is on the card — you can see when a Meta profile runs out instead
of finding out on the morning its data stops arriving.
Invitations can be taken back — a pending invite can now be revoked or sent
again.
A cabinet someone else already manages tells you who to ask — adding an ad
account another organization tracks now names the next step instead of stopping at
an error.
A revoked Meta token says so — it used to look like a temporary failure and
offered a Retry that could never work. Now it asks you to reconnect.
Start and Stop check the account, not the organization — starting or stopping
data loading now verifies access to that particular ad account.
Creative backfill no longer dead-ends — a run parked on a failure used to sit
Paused forever with no way to resume it.
The invitation screen is in English — it was the one screen still in Russian.
1.2.0
Take your reports with you — Excel export is here
Download any report as a clean XLSX file, exactly as you see it on screen — plus clearer naming across the whole app.
Your reports no longer live only in Level. Export any of them to Excel and
drop the numbers straight into a client deck, a spreadsheet model or an
email — formatted and ready to go.
Excel export for every report — one click on the new Export button
downloads the report as an XLSX file. It captures exactly what you see:
your filters, sorting, visible metrics and totals, for all report types —
segments, campaigns, months, ad accounts, creatives and video.
Export is permission-aware — team admins decide who can download data,
with a dedicated export permission alongside the existing report roles.
Clearer names everywhere — what used to be called a "client" is now an
organization, and "placements" are now ad accounts. The app now
cleanly distinguishes the ad account you report on from the platform
account you sign in with. Same data, same reports — just easier to talk
about with your team.
Subscription changes now reach your data sync instantly — if your plan
changes, background syncing pauses and resumes automatically to match it.
When you upgrade again, sync picks up right where it left off, with no
gaps to backfill by hand.
1.1.0
Level grows with you — introducing plans
Fresh data every hour, richer reports and room for the whole team — pick the plan that matches your ambition.
Big day for Level: subscription plans are live. Start free, and when your
agency takes off, Level scales right along with you — more clients, more
teammates, fresher data.
Plans for every stage — from a solo marketer testing the waters on Free
to agencies running dozens of ad accounts on Business and Enterprise. Paid
plans include hourly data refresh, creative & video reports, team roles and
more room for clients and teammates. Upgrade only when you need the extra
room.
Got an access code? Redeem it and your new plan kicks in instantly — no
forms, no waiting.
Skip the queue — on Business and Enterprise your support requests
automatically jump to the front of the line.
A smoother first day: the onboarding tour now picks up exactly where you
left off, plus dozens of polish and reliability touches across the app.
1.0.0
Level 1.0 — all your ad data in one place
The first release. Connect your ad accounts, build cross-channel reports, define your own metrics, and run your whole team with role-based access.
This is the first public release of Level — the reporting workspace built for
performance-marketing teams who are tired of stitching spreadsheets together every
Monday morning. Pull your ad data in, shape it once, and give every client and
teammate exactly the view they need. Here's everything you can do on day one.
Reporting is the heart of Level. Every report is built from your live data and
stays interactive — slice it the way the question demands.
Four report types out of the box: by segment, campaign, month, and placement — each with a layout tuned to that breakdown.
KPI cards surface the headline numbers at the top, with a date-range picker and period-over-period comparison so you can see what changed, not just where you landed.
Make it yours — reorder and hide metrics and segments per report, and Level remembers your layout the next time you open it.
Favorites — star the reports you live in and pin them to the sidebar for one-click access.
Share a report with a teammate without exporting a single file.