Revvly
Docs
Changelog

What we shipped, recently.

A running log of notable changes to Revvly.

v4.23
2026-11-04
  • NewLocation custom field. Add a field of type Location to clients, contacts or deals and pick the place from a search box, such as an address, a city or a country. Filter the Clients and Prospects lists by region: a continent, a country, or a region your workspace defines from whole countries, boxes and circles under Settings, Custom fields, Regions. Continents and countries match on the place's country, so a client just across a border is never included. A location cannot be filled from a spreadsheet import.
v4.22
2026-11-04
  • FixThe client page stays on screen while it refreshes. An open panel, such as Edit subscription, no longer disappears a moment after it opens.
  • FixMoving from the View subscription panel to Edit or End opens the next step reliably.
  • FixThe next-invoice discount preview on a subscription disappears once its last active discount is cancelled, instead of showing a discount that no longer applies.
  • ImprovedThe Forms, product events and Support widget guides now say what a Content Security Policy must allow, including the real dashboard address and the Amazon S3 host that attachment links point to.
  • NewA prepaid term now prepays the standing components billed in advance, such as seats, along with the base price. The signing invoice carries one line per prepaid period for each such component, and later renewals inside the term bill only the units added since. Components that reset each period are never prepaid. A renewal inside the term that has nothing to bill no longer raises a zero-value invoice.
  • NewChoose what the prepay incentive discounts. When you set up a prepaid term, Incentive applies to lets you pick the base price, the components paid ahead, or both. The subscription page shows the incentive and what it covers in the Billing schedule card and in How this subscription is billed. Terms sold before this keep discounting the base price only.
  • NewType text onto a document when you sign it. In the signing dialog, Add text places a line of text on any page, for a date, a place or a short note, next to your signature. The lines are recorded with the signed copy.
  • ImprovedAllowed origins for browser tracking and the Support chat widget accept a subdomain pattern such as https://*.example.com, which covers every subdomain but not the bare domain. Each list can now hold up to 100 entries.
  • ImprovedNew guide in the docs: how to set up product event tracking, from switching on Product usage to checking the Usage tab. The Support widget guide now lists the order of work. The privacy and cookie notices describe how Revvly measures the use of its own app.
  • FixChanging the quantity of a usage component that applies from the next cycle no longer fails with an error.
  • FixThe attachment preview has a close button. A slide-out panel no longer closes, losing what you typed, when you select text inside it and release the mouse outside. An open conversation stays on screen while it refreshes instead of flashing a loading message.
  • FixSwitching workspace no longer loses the last few usage events recorded in the dashboard.
  • NewSee how each client uses your product. Your product sends usage events to Revvly, and each client page gets a Usage tab showing activity over time, the features in use, sessions, and the people behind them. A new Product usage page under Clients compares usage across all your clients, and a user page follows one person across every client. It is available on workspaces where product usage has been switched on.
  • NewSend events from your backend or from the browser. Issue an API key with Can send product events and post to the product events endpoint, or add the Revvly events script to your site to record page views, time on page and sessions. Browser tracking uses a short-lived token your backend mints and only works from the origins you list in Settings, Product events. The new Product events API reference in the docs covers both.
  • NewTurn raw events into features. Settings, Product events lists every event name Revvly has seen. Map an event to a feature, ignore noise, or let Revvly suggest mappings from your documentation and accept the ones that are right. Nothing is mapped until a person accepts it. Names that Revvly masks, such as emails and card numbers sent by mistake, show as redacted, and an admin can erase all events for one user.
  • ImprovedTags now take a colour from a palette of 24 swatches instead of six, and the chosen colour shows wherever the tag appears. The Settings screen and its guide are now called Custom fields.
  • ImprovedNew guide in the docs: how customer-success managers use the CSM workload page. The teams and seats guide now lists the customer-success roles.
  • FixBrowser extensions and navigations that cancel a request no longer raise false error reports.
v4.21
2026-11-02
  • ImprovedSigning a file can now leave out the frame around the signature and the record-of-signature page. Both are optional in the signing dialog. When you keep them, the signed copy ends with a record page and each signature carries a framed ID stamp.
  • ImprovedThe organization picker shows the Revvly logo, reads Pick your organization, and wraps long names and descriptions instead of cutting them off.
  • FixTeam members who are not admins no longer see the team management actions on the Users page.
  • FixNotification switches no longer print their label beside the switch on mobile.
  • FixThe conversation thread and client page have tighter spacing and page margins, so threads use more of the screen.
  • FixQuestions the Slack and ClickUp assistants ask in a conversation no longer show links, and Slack no longer expands a preview under them.
  • NewGive every client a customer-success manager and a customer-success status. Set them on the Edit client form, or when you add a client. A new CSM workload page under Clients shows each manager's clients, the clients nobody manages yet, and a way to rebalance accounts. Settings, Roles has two new roles, CS manager and CS team lead; team leads see the workload page.
  • NewAdd tags and custom fields to clients, contacts and deals. Workspace admins define them once in Settings, Workspace, CRM fields, choosing from nine field types and, if needed, limiting a field to customer-success roles. Everyone with CRM then fills them in on the record's own form. The new guide Add custom fields and tags in the docs covers every step.
  • NewFind clients by their tags and fields. The Clients list has a Columns menu, can sort by most columns, and filters by tag and by field. Cmd-K and list search match the words in a client's fields, and you can use a field in an email template with {{field.key}}. Fields limited to a role stay out of search for everyone else.
  • NewEdit many clients at once. Tick clients on the list and choose Edit selected to add or remove tags, assign or clear the customer-success manager, and set or clear the status for up to 200 clients.
  • NewMark what each contact does at the company: finance, operations, champion, executive or technical. Contacts you had already labelled with one of those words move over by themselves.
  • NewFill custom fields from a spreadsheet. The CRM import lists your company fields, picks the column whose heading matches, and reads each cell the way you write it, such as yes or no, a choice by name, or a date as 2026-11-01.
  • NewCreate an invoice from a client's Billing history. The new Create invoice button opens the invoice form with the client and its billing currency filled in. The Revvly Assistant and MCP can propose the same invoice, and an admin confirms it before anything is raised. An invoice with no date takes your workspace's date.
  • NewSettings, Your Revvly plan, AI usage shows admins how often each AI feature ran this month, by feature and by day. It counts calls only: no cost is shown and nothing is charged.
  • NewPreview an email attachment without downloading it. Cc and Bcc fold away until you need them, and an empty inbox or conversation now suggests connecting a mailbox.
  • ImprovedMerging two clients keeps what the removed one carried. Tags are combined, a field the kept client has no value for is filled from the other, and the customer-success manager and status are carried over when the kept client has none.
  • ImprovedThe reset password, change email and invite pages follow dark mode, and show the Revvly mark and service status like the sign-in page.
  • ImprovedThe public GraphQL API lists a client's custom fields, read-only, leaving out any field limited to a role.
  • FixThe password you choose when you sign up yourself now works at sign-in. Before, the sign-in that follows the confirmation email was refused. If you signed up before this and could not sign in, confirm your signup again to set the password.
  • FixA billing period whose only plan-charge invoice was force-deleted is billed again. Before, the renewal treated it as already invoiced and the period was never billed. Restoring a deleted period raises its opening invoice without counting its usage twice.
v4.20
2026-10-31
  • ImprovedReply drafts are now switched on per person. Each person turns on Write reply drafts for me in their inbox settings before any draft is written for them, since every draft uses the workspace's AI credits. People who already had a draft policy keep getting drafts.
  • ImprovedUndo an automatic tidy-up from the thread itself. When the inbox archived, moved or marked a thread read on its own, the open thread shows what it did beside the reason, with an Undo button.
  • ImprovedArchive and move policies can leave unread mail alone, so a message nobody has opened is never tidied away. The option starts on when you archive Security mail.
  • ImprovedA new aging alert starts at 3 days for clients and 7 days for prospects and new contacts. Alerts you already set keep their wait.
  • ImprovedEvery date on the Finance tabs, the invoice page and the invoice date pickers uses one short format, such as Oct 29, 26. Overdue amounts in several currencies show as one alert instead of one per currency.
  • ImprovedRows, cards and controls that could only be clicked now work from the keyboard with Enter and Space.
  • FixAn edited email draft that failed to send once can be sent again. Before, every later attempt was refused.
  • FixWhen a Calendly connection expires or is revoked, Revvly now asks you to reconnect it instead of failing again on every request.
  • FixA billing period whose usage reading was never taken now shows in the open usage readings queue for you to enter or waive, and its invoice waits for that. Before, it was retried every night without telling anyone.
  • FixOn a phone, the automatic action controls in inbox settings stay inside their card, and a card's description wraps below its title. The rule field offers example sentences.
  • FixA bulk move tells you when some senders stay filed elsewhere because the inbox holds them under another category, and points you to rules.
  • NewSearch finds records by what you remember about them. Clients, contacts, invoices and subscriptions are searched across names, emails, domains, phone numbers, tax ids and notes, tolerate typos, and show which field matched. Press / to jump to a list's search, use the In: menu or prefixes such as email: and inv: to narrow it, and results are ranked by best match.
  • NewCmd-K searches clients, contacts, invoices and subscriptions in one request, with scope chips, recent searches and a link into the full list for the same query.
  • NewYour inbox sorts mail more accurately and learns from you. After you move a thread, it offers an always file here rule for the sender or the whole domain. Colleagues are no longer filed as prospects, a company with a paying subscription is always a client, and automatic replies are never marked as waiting for an answer. Settings has a rules card where you can type a rule in plain words, check it, and confirm it, and an Unsorted list shows one suggestion per sender.
  • NewChoose what happens automatically to each inbox category. Mail can be archived, moved to Other, marked read, or flagged when it has waited too long. Nothing applies to mail from people, every action is logged, and each can be undone while the thread is unchanged.
  • NewGet a drafted reply for client, prospect and new contact threads that are waiting on an answer. A Draft ready badge appears in the list, and Edit and send opens the usual composer. Nothing is sent until you send it. Drafting is off until an administrator turns it on.
  • NewStart a new company from its website or a work email. Revvly reads the site's public pages and fills the name, legal details, address, logo and region for you to review, only into fields you left empty, and points you to a record you already have for the same domain.
  • NewAdjust usage from a client's Subscriptions tab, and see the exact charge for a mid-cycle seat change before you apply it.
  • NewSettings opens as its own menu. The sidebar swaps to the settings pages under their headings, sections collapse, and Back returns to the page you came from. Integrations shows whether Google Drive is connected, and a new Team email card shows which members have connected a mailbox.
  • ImprovedPast Due in Finance now lists overdue invoices with the same columns as All Invoices, and the expected date can be edited in place. This Week covers the calendar week, Monday to Sunday, with a status filter. Dates read like Oct 29, 26.
  • ImprovedThe STAGING and DEV label has a refresh icon that discards the cached app and reloads, so you can load the latest build without signing in again.
  • FixA mid-cycle seat change on a yearly term is charged for the months left, not the whole year, and Regenerate invoice re-prices unpaid adjustment invoices. Revvly books the added seats as expansion from the day they took effect, and earlier movements are restated.
v4.19
2026-10-29
  • ImprovedPast Due in Finance now lists overdue invoices with the same columns as All Invoices, including the column picker. The expected payment date can be edited in place, and expected and due dates read like Oct 29, 26.
  • FixThe search box in the top bar now collapses to an icon on phones, so the theme, What's new and notification icons stay on screen.
  • NewSee Revvly's service status from the icon in the top bar. It shows a service problem when there is one, else a release you have not read. The sign-in page and the website footer show the same status, and platform admins can post an incident or planned maintenance in Settings, Platform status.
  • NewGet a warning before a period bills zero usage. When a reading is about to close empty, the people who manage usage are notified, and the reading can be held for review so its invoice waits until someone enters a figure or waives the period.
  • NewOpen an invoice from its number in All Invoices. A slide-out shows the invoice PDF with a Download button and a link to the full invoice.
  • NewAsk the Revvly Agent how billing timing works. It explains what is billed ahead and what is billed after the period, and the billing guide is also on the catalog page and in the docs.
  • ImprovedA subscription that gets two invoices each period now says so. The billing explanation opens with a notice, and the client page shows a 2 invoices per period chip under the subscription.
  • ImprovedBulk regenerating invoices now shows a progress bar and a Stop button. Invoices not attempted stay selected so you can retry them.
  • ImprovedUsage capture uses one set of words everywhere: API (from the integration), Manual (entered by someone) and Default (API). The catalog badge Automated is now No input needed.
v4.18
2026-10-29
  • NewSee what changed in Revvly from the What's new icon in the top bar. A dot shows when there is a release you have not read, the panel lists the latest releases, and the What's new page holds the whole history grouped by version.
  • NewUnderstand how each subscription is billed. The client page shows the next invoice under every subscription and whether someone needs to enter a usage reading, and a new How this subscription is billed block on the subscription page, its quick view and the new-subscription recap lays out what is billed ahead, what is billed after the period, and the next invoices.
  • NewFilter invoices by client region in Finance, and regenerate several invoices at once. Choose regions to include or exclude (clients with no region stay in when you exclude), then select invoices and use Regenerate in the selection toolbar.
  • NewConnect GitHub to the Revvly Agent by signing in with GitHub. Adding a connected server now opens a four-step wizard, and the connection name is no longer something you have to choose an id for.
  • ImprovedLinks to the dashboard now show a Revvly preview with the brand image when shared in messaging apps.
  • FixPlans billed in advance now charge usage components such as seats for the period they open, not the one that just closed. Before, the advance invoice came out at zero and a client who dropped seats before renewal paid the next period at the old count.
  • FixA subscription billed in advance can no longer get the same advance invoice twice, and a renewal invoice that failed is retried instead of being mistaken for the advance invoice, so the period's usage charges are no longer skipped.
v4.17
2026-10-29
  • NewLog a ticket for a client from the Support inbox. New ticket records a request that came in another way, such as a call or an email: choose a type, a title, a priority and an assignee (you by default), and name a person from People, a client, or both. What the client asked is saved as an internal note, so the AI does not answer it and no email goes out. The client does not see the ticket in their widget until someone replies publicly on it.
  • NewLet the AI keep answering a chat beside your team. The AI replies switch in a ticket’s header makes the AI answer the customer’s messages even after someone has taken the ticket, replied in public or the AI handed over. Turn it off to stop it; the change is recorded as an internal event on the ticket.
  • ImprovedCompare with Intercom keeps a history of every run. The new Comparison history table shows the Revvly and Fin resolution rates of each run, the change in points since the run before, the cost and the models, with a CSV download per run, and opening a run shows its full report.
  • ImprovedCompare with Intercom compares like for like. Fin answered sits beside Revvly answered, and Fin confirmed beside Revvly would resolve. The conversations table has a Show filter for the conversations Fin resolved and Revvly did not, and the ones where Fin found an article that Revvly’s search missed. Revvly now answers from the nearest article and says what it does not cover, and answers each likely reading of an ambiguous question in one short reply instead of asking which was meant.
  • NewAttach Google Drive files from the email composer. The Drive picker opens in the client’s folder, including when you reply from the Work Inbox, lets you click into subfolders, and searches by file name.
  • NewTrack sub-processor and breach notification terms on client contracts, and see them across clients under Contracts, Clauses across clients. Reading a PDF suggests the terms; nothing is saved until you save it. A contract template can also be downloaded as a PDF.
  • ImprovedAsk Revvly conversations can be archived, restored and deleted. Replying from the Work Inbox can add a follow-up task, and an invoice can be deleted from its own page.
  • FixA ticket logged for a client stays hidden from them, including their live updates, emails and webhooks, until someone replies publicly. Back to client on a contract returns to the Contracts tab, and the prospect Contracts tab no longer redirects to Overview.
  • ImprovedComponent badges explain themselves. Hover or tap the timing, reset and data-entry badges on a usage component to read what each one means, in the catalog, in the meters list, and when you add or review a subscription.
  • ImprovedPages and links that look up a single record open faster on large workspaces, including email open and unsubscribe links, client form links, invitation links, the usage API and the contacts list.
  • FixA client’s email conversation loads its whole history, including older mail synced from Gmail, and filing an email to the client record no longer slows down on long conversations.
  • ImprovedRegenerating an unpaid invoice re-checks its tax. If your tax setup was wrong when the invoice was issued, for example a client taxed in a country you are not registered in, regenerating a Pending or Overdue invoice now removes or corrects the tax and keeps the tax report in step. Part-paid, credit-note and already-credited invoices are left as they are; correct those with a credit note.
  • ImprovedRegions no longer ask for a separate tax country. The region code already names the country, so the Tax country field is gone from the region forms.
v4.16
2026-10-20
  • NewClient folders in Google Drive. With the feature on, each client and prospect gets its own folder in your Drive, under a Clients folder and a Prospects folder you choose under Settings, Integrations, Client folders. Revvly files invoices and credit notes there, along with uploads, email attachments, form uploads and Support attachments, in one folder or in subfolders by source, and files people add in Drive come back to the client’s Documents tab. When a prospect becomes a client its folder can move to Clients on its own, after asking, or not at all. Revvly never deletes, trashes or re-shares anything in your Drive. Turning it on asks Google for write access. See Keep client folders in Google Drive in the guides.
  • NewMark documents and import invoices from them. On a client’s Documents tab, mark a file as Invoice, Credit note, Contract, Proposal, Deck, Proof of payment or Other. Files marked Invoice, email attachments included, go through the usual import review, payments can be recorded against what was imported, and the state shows on the file in Drive. The bell tells you when an import has invoices waiting for review.
  • ImprovedA transaction import now settles invoices Revvly already holds when a row carries a payment date. A part payment books only what is still missing, importing the same file again records nothing twice, and a row marked Paid with no date leaves the invoice unpaid. The last step shows how many payments were recorded.
  • NewPropose a subscription from a form. Plan, Billing period and Start date fields turn a client’s answers into a Proposed subscription on their Forms tab, and Create subscription opens the usual subscription wizard filled in for you to review. A plan option follows the plan to the version currently on sale.
  • ImprovedDaily check-ins post each person’s answers to the channel as soon as they answer, and a redo edits that post in place. A question marked Show this answer first in each post has its answer placed straight under the person’s name. The end-of-day report is now a summary: who answered, skipped, stayed silent, was away or could not be reached, so the Report layout setting is gone. Links in answers can be clicked, and a question can be set to be asked only on chosen weekdays; a day with nothing to ask is skipped.
  • ImprovedCompare with Intercom asks the customer’s real question instead of a short opener such as a quick-reply button, and a new section, Why conversations were not resolved, gives the likely reason for each one, with a Reason filter on the table. The drawer shows Fin’s sources and what the search returned. Older runs need a new run to show reasons.
  • ImprovedWriting a role rule now suggests the attribute keys your people carry, from your system and from an Intercom import, then each key’s values with how many people hold them.
  • NewTrial start and Trial end columns on the pipeline forecast sheet. Edit them in place, sort by them and export them to CSV; turn them on under Columns.
  • ImprovedOn an objective’s page, the description and the Key Results each have their own card. Each Key Result shows its last check-in date, or the date of its last value for a metric Key Result, and opening it lists its five newest check-ins without leaving the page.
  • FixTurning on Sync client folders straight after choosing the root folders no longer asks you to choose them again. Scrolling the Support inbox no longer moves the whole page. Settings tabs wrap onto a second row instead of scrolling sideways, and Revvly links in Slack messages and the inbox digest open correctly.
v4.15
2026-10-19
  • NewSend a form to a client. From the Forms tab on a client or prospect, choose a published form and copy a link only that client can use. It opens with what you already hold filled in, can be reopened until it is answered, and can be revoked; the email composer has a Form link button to put one in a message. A form can be kept to client links only.
  • NewApply a client’s answers to the record. Mark a question as a client field, such as billing address, tax ID, legal name, company number, invoice contact or contract signer, and the Forms tab shows each answer beside what you hold now, with an Apply button. Nothing is written to the client on its own, and answers from your website form are shown but never applied.
  • NewReply from the Work Inbox. Reply on any message in a thread and it goes from your own mailbox to whoever sent it, or to the people you wrote to if the message was yours.
  • NewHandle several inbox threads at once. Tick threads (shift-click ticks a range, x ticks the one in focus), then mark them Done or move them to a category. On a phone, swipe a thread right to mark it done.
  • NewChange a subscription’s plan through the public API. changeSubscriptionPlan moves a subscription to another bundle or set of modules: with timing IMMEDIATE the difference for the rest of the period is invoiced or credited now, with NEXT_RENEWAL it applies at the next renewal and nothing is invoiced today. Correct a client with updateClient: name, externalId, description, billing address, tax ID, payment terms and renewal-invoice lead days, where a field you leave out is left alone. The region, invoice numbering and trial cannot be changed through the API.
  • NewPage through a client’s whole invoice history with Client.invoicesPage(status, limit, after). It returns data and nextCursor, newest first, and never repeats or skips an invoice, even one issued while you are paging. Client.invoices is unchanged.
  • NewCard payment webhooks. A webhook can now subscribe to payment.succeeded, payment.failed and payment.action_required, sent for each card charge on an invoice. Each carries the charge, the invoice, the client with your externalId and the amount; payment.failed also says whether another attempt is scheduled and why the card was declined. Nothing about the card itself is sent.
  • ImprovedCompare with Intercom now works out each imported customer’s roles from their Intercom role and attributes. A conversation that could not be answered because the customer matches none of your roles is shown as No matching role and left out of the rates, and the End users pages show the imported Intercom role and attributes.
  • ImprovedThe Revvly Assistant can open a page of the dashboard behind the chat and point at a record on it, for example the client it just created, and it knows which page you are on.
  • FixThe date picker opens above its field when there is no room below.
v4.14
2026-10-18
  • NewWork Inbox. Each person gets their own inbox of their connected Gmail under Inbox in the sidebar, with the client beside each thread. Mail is sorted into categories such as Client, Prospect, New contact, Team, Payments, Bills, Newsletters and Promotions, and split across Primary, Needs reply, Other, Snoozed and Done. Done, unread, starred and snooze change Gmail as well. Moving a thread teaches the inbox where that sender’s mail goes, and the inbox settings choose where each category lands, turn on a daily digest and show what was learned. Quick actions include one-click Unsubscribe, Mark all done on Promotions and Newsletters, and Forward to accounting on Bills. Nobody else sees your inbox, admins included. See Work your inbox in the guides.
  • ImprovedInbox columns can be resized by dragging their edge, and in dark mode an HTML email that sets its own colours is shown on a light background so it stays readable, in the Work Inbox, a client’s Conversation tab and Support tickets.
  • ImprovedOne Import menu on the Knowledge page, also at the foot of the inbox views for admins, brings in an Intercom or Zendesk help centre or past Intercom conversations.
  • ImprovedThe browser tab now names the page you are on.
  • FixA sent email no longer shows twice in a client’s conversation.
v4.13
2026-10-16
  • NewDaily check-ins in Slack. Admins set one up under Settings, Check-ins: up to 10 questions, who is asked by team or person, the ask and report times for everyone at once or on each person’s own clock, the days, and a reminder. People answer in a Slack DM one question at a time or in a form, or use /revvly standup to answer, skip, check status or say they are away, and the answers are posted to the channel you choose. {last_checkin} and {today} in a question become real dates. The Assistant can create, edit, pause, resume and test a check-in, with a card to approve each change. See Run daily check-ins in Slack in the guides.
  • ImprovedSeveral unread emails from one client fold into one row in the bell, such as 4 new emails from Acme, and count as one unread. Email rows read New email from the client, with the source on its own line.
  • ImprovedThe Knowledge articles table can stack up to 10 address rules (Starts with, Contains, Does not start with, Does not contain), and an article must meet all of them. The Who can read column always shows, with each role as a badge.
  • FixA refund or credit note raised by hand no longer sends invoice.issued. The idempotencyKey on changeSubscriptionQuantity now applies per subscription and component, so reusing one on another subscription is no longer treated as a retry. A Stripe account can be connected to one workspace only, and connecting one already in use elsewhere says so. Creating a form through the Assistant no longer fails as changed since it was proposed.
v4.11
2026-10-16
  • NewAudience rules for knowledge sources. On a help site, Intercom or Zendesk source, set ordered rules on the address path (starts with, ends with, contains, or the opposite of each) that decide who may read each page; the first rule that matches wins, each rule shows how many pages it matches, and a choice made by hand on an article is never changed. Save applies the rules as pages are added or change; Save and apply to existing pages also updates what is already there.
  • ImprovedSupport end-user roles moved from Org Settings to the Knowledge page, under the Roles button, beside the articles they decide. Old links to the Roles settings open the new panel. The rules that leave pages out of a source are now called Pages to leave out.
v4.10
2026-10-15
  • NewFree trials on subscriptions. Create a subscription with a trial length (trialDays, up to 365, through createSubscription on the public API or the createSubscriptionWithPricing mutation) and it starts as Trial: usage such as seats can be reported, but nothing is invoiced and nothing counts toward MRR. When the trial ends it converts on its own, its first period starts that day and is invoiced in advance. A trial can be extended or ended early, and one cancelled before it converts is never billed or counted as churn.
  • NewRead your price list through the public API: catalog(regionId) returns the published bundles and modules you sell, priced per period for that market, with the metered components each includes and their unit price, so a signup or pricing page never hard-codes a price. Manage a subscription through the public API. Read one with subscription(id or externalId) and see what it bills for in items; read one invoice with invoice(id); change a seat count with changeSubscriptionQuantity, which invoices an increase prorated for the rest of the period and can preview the price first; and cancelSubscription, setSubscriptionAutoRenew and endSubscriptionTrial. Save a client's card through the public API: startPaymentMethodSetup returns what Stripe.js needs to collect it on your own page, and Client.paymentMethod shows the card on file.
  • NewBilling webhooks. A webhook can now subscribe to invoice.issued, invoice.paid, invoice.overdue and invoice.payment_reversed, and to subscription.created, subscription.trial_will_end, subscription.trial_converted, subscription.cancelled and subscription.ended. Payloads use the public API field names and include the client with your externalId.
  • ImprovedTwo clients can now have the same name: each client gets its own workspace even when another workspace already uses the name.
  • ImprovedRecording a payment through the invoice payment webhook now needs the Can record payments capability (PAYMENT_WRITE) on the key, instead of any key with a signing secret. Keys that were live when this shipped were given it, so existing payment integrations keep working; new keys only get it when you tick it.
  • ImprovedOne description of your business. The Business profile under Settings, Business now feeds both the OKR review and the Revvly Agent, and gains two fields only a person fills in: Focus this period, and Constraints (things you will not do; the agent takes them into account and tells you when a request goes against one). The separate workspace profile under Settings, General is gone; what was written there was copied into the Business profile wherever that field was still empty.
  • ImprovedSee and change what the Revvly Agent remembers. Ask it what it remembers and it shows the Business profile and your memories; ask it to reword or forget one and it shows the change on a card for you to approve. Under Settings, General, Agent memory, each memory can be edited in place, Show what the agent sees prints exactly what the agent receives, and Review with the agent opens the Assistant with that question ready to send.
  • NewCompare with Intercom. Before switching the Support AI on, see what it would have done on a sample of your imported Intercom conversations, graded against the reply each customer actually received, beside the resolution rate Intercom recorded for Fin. Both figures come with a 95% range and their sample size, and every conversation can be opened side by side. Nothing is sent to anyone, the run counts toward your daily AI spending cap, and it is never billed as a resolution. See How the AI first line works in the guides.
  • ImprovedThe Intercom conversation import now keeps what Intercom recorded about Fin on each conversation: whether it took part, how it ended, the sources it cited and the ratings. Running the import again fills it in for conversations imported before.
v4.9
2026-10-14
  • NewHypotheses under each Key Result. Write each bet down, rank it on reach, impact, confidence and effort, state the expected outcome, decision rule and end date before the test starts, and record the verdict and what was learned. The In flight board, the Learnings library, similar past bets as you type and calibration by confidence level make the learning outlast the cycle, and a cycle cannot close with a test left open. See Test your bets with hypotheses in the guides.
  • NewGap coverage. Each Key Result shows how much of the distance to its target its open bets could cover, weighted by confidence, on the Hypotheses tab and as “Covers N%” in the cycle and team views. The weekly digest lists Key Results that are behind with a plan covering under half the gap.
  • NewBefore and after for metric-backed Key Results. A test on a Key Result that reads a Revvly metric records the metric when it starts and when it concludes, and the Analytics charts mark the months tests started and ended.
  • NewConclude a test in Slack. The reminders before and after a test’s end date carry a Conclude here button, and /revvly conclude starts the same conversation: it shows what you expected and your decision rule, then asks for the outcome, the result and the learning. Workspaces can also post each concluded test’s learning to the announcement channel, under Settings, Notifications.
  • NewClickUp tasks linked to a hypothesis show their current title and status, read from ClickUp every half hour. When every linked task is done, the owner is asked once whether the test is live, with a button to start it. Revvly reads ClickUp and writes nothing back, and never changes a status on its own.
  • NewThe Revvly Agent remembers. Tell it something lasting, such as how you like answers or a rule of the business, and it offers to remember it; nothing is saved until you approve. Admins can save memories for the whole workspace, everyone else for themselves, and every conversation then starts with them and with the workspace profile. See and remove them under Settings, General, Agent memory.
  • NewThe Revvly Agent can coach a plan. Ask which Key Results are falling behind, and it reads the numbers, the bets already open and what earlier tests taught, then proposes up to three new hypotheses for you to approve into Backlog. It fits them to the workspace profile your admins write under Settings, General, and remembers the bets you decline, with your reason, so it does not offer them again. The same tools are available over MCP.
  • ImprovedSimilar hypotheses and the Learnings search now match on meaning, not only shared words, so a past bet phrased differently still turns up.
  • ImprovedDropping a Key Result keeps it visible in the cycle with its reason, out of scoring, and a team page shows one team’s objectives and Key Results with the company Key Results they serve.
v4.8
2026-10-13
  • NewTax management. A workspace with tax switched on can record its tax registrations and the rates it charges, with effective dates and versions, then see the tax on a draft invoice before it is issued. Each client can carry a tax profile with tax IDs and exemption certificates. Invoices, their PDFs and credit notes show the tax breakdown, receivables can be read gross, net or as tax only, and a tax report groups what you charged by country, treatment or registration and exports to CSV or Excel. Every tax line is also written to an append-only ledger so the figures can be reconciled. See Collect tax on invoices in the guides.
  • NewA notification centre in the header bell. Alongside Support tickets, the bell now lists activity from forms, OKRs, email, Calendly bookings and overdue invoices. You choose which kinds reach you under your notification preferences, you are never notified of your own actions, and scrolling the bell loads older items. See Get notified in the guides.
  • NewSend CRM leads to other tools with outbound webhooks. Settings, Webhooks sends an event to a URL you choose when a lead is created, updated or deleted, which is how a form submission can land in a Google Sheet through Zapier. See Send events out with webhooks in the guides.
  • NewImport conversations from Intercom into Support, and see a client context panel with a ticket: the client’s plan, base MRR, billing standing and recent tickets, so an agent knows who they are talking to.
  • ImprovedEmail tracking tells your team apart from the people you wrote to. An open by someone on your team no longer counts as the recipient reading the email or uses up the client cooldown, and the email template list shows where each template has been used.
  • ImprovedA deal opens in one panel with Deal, Conversation and Tasks tabs, so the emails and tasks for a deal sit next to its details. The Work queue shows only tasks that are overdue or due today, and the reply box sits above the email you are answering.
  • ImprovedThe Support knowledge articles page is a table with path filters, bulk actions and address rules, and address filters can now exclude a match as well as include one.
  • ImprovedSupport roles are yours to define, with no ready-made ones. A role now says which values it matches in what your system already sends: the user’s role value or one of their attributes, so you no longer change your integration to fit Revvly. A person can have several roles and sees the articles open to any of them, a role value no role matches is accepted and simply sees what is open to everyone, roles no longer carry a plan restriction, and an edit applies to the next answer. Deleting a role never opens an article to everyone: one only that role could read waits for a decision. Before you read a knowledge source, you choose whether Revvly may update who can read guessed articles from your role hints. See Set up Support in the guides.
v4.7
2026-10-13
  • ImprovedAn objective opens to read, not to edit, once its cycle is published. The breadcrumb on a Key Result, the Coverage page and the cycle page now land on the objective with its Key Results listed, and an Edit button opens the form, with Cancel and Save returning you to where you were. While a cycle is still a draft the objective opens in the form as before, and once scoring opens there is nothing to edit, so it stays read-only.
v4.6
2026-10-11
  • NewPush your help articles to Support through the API. If your help content lives in your own system, send it to Revvly instead of having a site crawled: a key with the new Can add knowledge articles capability adds or updates up to 50 articles per call by your own id, removes articles by id, and closes a full refresh so what you no longer have is removed. You state who may read each article, by role and plan, so nothing is guessed. Revvly can also import an Intercom or Zendesk help centre with your own token.
  • NewGuides for the people who run Support. Work the support inbox covers views, filters, replies and internal notes, assigning, closing and auto-close, and how each Metrics number is computed. Build the knowledge base covers the five kinds of source, who may read each article and keeping sources healthy. How the AI first line works covers cited answers, handover, the switches and spending cap, billable resolutions and the sandbox. Set up Support covers roles, ticket types, notifications, client updates, ClickUp and a go-live checklist.
  • ImprovedLibrary is now one sidebar item in the Workspace section, after Work queue, with three pages beneath it: Documents (the document library), Forms and Templates. Library and Forms used to be separate rows under Customers, and Templates was only reachable from Settings; it is still a tab there too. Each page appears only when the workspace has the feature behind it, and the addresses have not changed, so existing links and bookmarks still work. The command palette lists the same pages under Library.
v4.5
2026-10-10
  • NewCheck in through ClickUp Chat. A workspace that lives in ClickUp can send its OKR messages there instead of Slack: the weekly prompt, the daily reminder, scoring, the digest and the announcements all arrive as ClickUp chat messages, and people answer by replying in the chat. An administrator switches it on under Settings, Integrations, ClickUp, links each person to their ClickUp account (Revvly proposes the matches by email) and can pick a channel for company-wide posts. Only the person it was sent to can answer, and check-ins made this way show as via ClickUp. ClickUp Chat has no buttons, so each message says what to type, and replies are read about once a minute.
v4.4
2026-10-09
  • NewDocument library. Admins upload proposals, decks, contracts and pricing sheets once, up to 100 MB each, and keep them current with versions that are never overwritten. Everyone on the CRM or Support add-on can attach a library document from the composer, or link up to five to an email template so applying it attaches their current versions. Every file is type-checked and, where scanning is configured, malware-scanned before anyone can use it. Documents over 10 MB go out as links.
  • NewSend a library document as a tracked link, and see when it is opened. In an email, a document over 10 MB goes in as a link placed in the body at your cursor (smaller files still attach as files), and in a Support reply it is added to the message as a link: any size up to 100 MB, always the latest version or pinned to the one you sent, with download on or preview-only, valid for 180 days and revocable at once from Library. Every send gets its own link, so a view traces to the email, and to a person when the link went to one recipient or they choose their own address. A view shows on the email as Document viewed, and when the email itself never registered an open because images were blocked, a viewed document counts as the open. Mail security scanners that fetch every link are recognised and not counted. Library shows how often each document was sent and opened, and Support shows agents which links on a ticket were opened. The sender gets a push notification the first time a link is opened, and a saved email draft remembers the documents you chose to send as links. Links use the Revvly domain for now.
  • NewForms. Build a contact, demo-request or application form with text, choice, date, consent, file upload (up to 5 files of 30 MB) and hidden campaign fields, then share it as a link, embed it on your site, have a coding agent build it into your own design from a generated prompt, or submit to it from your server with an API key that can only submit forms. Each submission is stored and runs the steps you choose, in order: create a lead (on the existing contact when the email is known), email chosen teammates, send your own email from Revvly, the shared mailbox or your mailbox, and post to Slack. Failed steps retry on their own and can be retried by hand, submissions export to CSV, and the Assistant and MCP clients can read them.
  • NewLink ClickUp tasks to a Key Result. An administrator connects ClickUp once; anyone who can edit a Key Result pastes a task link, and the Work card shows the task, its status in ClickUp’s own colour, who it is assigned to, when it is due and how many subtasks are closed and open, by status. Revvly keeps one note on each task in ClickUp saying which Key Result it serves, with the timeline, how much is left and confidence, edited in place as things change. Unlinking strikes the note through and records who disconnected it and when. A task being done never moves a Key Result’s number, confidence or score.
  • NewA daily reminder while a check-in is owed. After the weekly Slack prompt, each weekday at the same local hour you get one short reminder listing what is still due, and it stops when you have checked in. It follows the prompt you were actually sent: it is never sent on the prompt’s own day, on a weekend of your own calendar, or for a Key Result that was created or handed to you after the prompt. A reminder that failed to send is tried again later the same day.
  • ImprovedThere is a guide to running OKRs in the docs, from turning the module on to scoring and closing a cycle.
v4.3
2026-10-08
  • NewScore your Key Results from Slack. Owners are told when scoring opens, nudged weekly at their own local hour while a score is still owed, and the company channel hears when a cycle closes, with how many Key Results were scored and how many were not. /revvly score, typing score, or the Start scoring button walks you through the final value and then a required comment, written through the same rules as the scoring page. A check-in conversation left open says scoring has replaced it once the cycle moves on.
  • NewFilter Conversation by team member. The mailbox view can be narrowed to a teammate, including mail from their connected mailbox.
  • NewLink your Calendly teammates to Revvly users. Nobody needs a Calendly account of their own connected: an admin maps who is who in Booking intake settings, matched by email or by hand, and the composer's Scheduling link menu then offers your own links first and each linked teammate's under their name.
  • NewMove a recipient between To, Cc and Bcc from its menu, or drag it onto another line. A hidden Cc or Bcc line opens when it receives an address, and an address is never dropped or duplicated by the move. Replies now leave you out of To and Cc, and each email in a thread shows its Cc and Bcc lines.
  • ImprovedThe Work queue shows a deal's stage colour and pipeline, opens a task panel on deals, and lets you complete a task from its circle. Ticking an account task now responds instantly instead of waiting for the server.
  • FixA company's Open tasks box now includes tasks linked to its contacts.
v4.2
2026-10-07
  • NewScore and close an OKR cycle. The cycle owner moves a running cycle into Scoring, and every Key Result owner confirms a final value and a required comment. The score is worked out from the final value, never typed in, and can be amended while the cycle is still scoring. A Key Result's target, unit, direction and metric are frozen once it is scored. Metric-backed Key Results are read once when scoring opens, so the value to confirm is where the metric stands now. Closing turns the cycle into a read-only record and refuses while Key Results are unscored unless you confirm it. The cycle page gets a cycle switcher, scored and waiting counts (no averaged score) and an owner-only chase list, and My OKRs swaps Check in for Score while the cycle is scoring.
  • NewCheck in on your Key Results from Slack. Answer the weekly prompt in a direct message with the Revvly bot, or use /revvly checkin, /revvly mine and /revvly status. It asks for the value, then confidence, and for what changed only when a confidence drop needs a note. Loose numbers such as 528k, $528,000 or 12% are understood, metric-backed Key Results skip the value question, and a Key Result that was dropped, reassigned or scored mid-conversation is skipped with the reason. The prompt arrives once a week at each person's own local hour, only for people with something due and only while the cycle is active. A redelivered message, a double click or two servers answering at once can never write two check-ins.
  • NewLink team Key Results to the company Key Results they serve, and see the gaps. Alignment is loose by design: a link is optional, nothing is scored or rolled up from it, and an empty alignment card reads as fine rather than as a warning. The new Coverage page (OKR, Coverage, also in the command palette) is a matrix of company Key Results against teams, flagging company Key Results nobody linked and teams whose Key Results link to nothing. Cycle owners see a notice on the cycle page when company Key Results are uncovered.
  • NewOKR notifications and a weekly digest. People hear when a cycle goes live, when a Key Result or objective becomes theirs, when a target changes on something they own and when they are added to a team. Cycle owners, and team leads for their own team when you choose to copy them, get a weekly digest of what is stale, falling in confidence, unowned, unattached or failing to refresh, plus how many people were prompted this week and how many answered, so a broken connection reads as 0 people prompted rather than a fortnight of silence. A digest with nothing in it is not sent, and nothing is sent for a workspace that has not turned OKRs on.
  • NewThe forecast page is now a place to work, not only to read. A deal's stage is a select over its own pipeline's stages, and moving a deal to a Won or Lost stage takes it off the forecast at once. Each row has an actions menu with Delete deal, and demo bookings now show on the forecast.
  • NewEdit internal notes and hand-logged touches in a client or company's Conversation tab. Notes can change their text and pin; a logged touch can change its details and its contact, including unlinking it. Emails synced from a mailbox stay read-only.
  • NewA company's Overview has a Coming up card listing upcoming meetings with the company or any of its contacts. A booked meeting is recorded against the contact who booked it, so the company never saw it before; a contact who moves between companies now takes their history with them.
  • NewFollow-up dates count business days, not calendar days. When you have open tasks on the record, the composer's main button becomes Send email and close task, with Send email only in the menu beside it.
  • ImprovedCc and Bcc suggestions in the composer no longer repeat an address, list all of a company's contacts, and include your teammates.
  • FixA client whose invoice number seed was cleared can be saved again.
v4.1
2026-10-06
  • NewRecord why a deal was lost. Moving a deal to a Lost stage now offers a box for why, from the board, the deal drawer, a company's Deals card and the edit panel. The reason is optional, can be edited while the deal stays lost, and is cleared if the deal leaves Lost. The Assistant can search the reasons, so you can ask what you lose deals on instead of reading them one at a time.
  • NewInsert a Calendly booking link from the email composer. A Scheduling link button next to Insert field adds the chosen link as a hyperlink, for workspaces with a live Calendly connection.
  • NewEmail open history. An email shows each time it was opened with when it was sent, when it was first opened and how long ago each open was, limited to the threads you can see.
  • FixThe Work queue no longer fails with Your tasks could not be loaded when a task is linked to a contact that has only an email address.
  • FixThe /revvly command and Slack button clicks now answer instead of returning an error to Slack. The Finish setup button in the welcome message opens Settings, Slack.
  • NewPractice in the Support sandbox. The Sandbox link at the foot of the Support inbox opens a hidden copy of your Support setup where a practice customer chats through the same API your widget will use, while you answer from the inbox next to it. Choose who the customer is (a name, a role and plan you declared, a company) and see what they see. Nothing reaches your real inbox, client pages, metrics or email. Reset it any time to copy your latest setup again.
  • NewLive updates in your support chat. Open one stream per signed-in user (GET /api/v1/support/chat/stream) and your chat hears about new replies, status changes and closes on that user's requests as they happen, plus a typing indicator while your team writes a reply. In a browser, createStreamTicket gives you a one-minute ticket for a plain EventSource. Streams resume where they left off, and you can stop polling.
  • NewLive updates through your own backend. If your users talk to your backend rather than to Revvly, add up to five endpoints under Settings, Support, Webhooks, each with its own signing secret and the events it wants (request opened, new message, status changed, closed and more), and Revvly posts each change your users can see, signed, so you can pass it on. Failed deliveries are retried for up to about nine hours, an endpoint that keeps failing is switched off until you turn it on, and the Deliveries list shows what was delivered and what failed, with a Replay button that sends one again with the same event id.
  • NewKnow who you are helping. Your backend can send up to 25 attributes per user, such as company stage or cohort, when it signs them in, or sync up to 500 users at a time with upsertSupportUsers. Agents see them beside each request, and Support, End users lists everyone with their client, role and requests. A user is matched to their client's contact by email.
  • ImprovedSupport secret keys now allow 50 sign-ins a second and 3,000 a minute, and admins can raise that under Secret keys, Limits, which also shows the last day's traffic and anything refused. The docs now show how to reuse each user's token for its hour.
  • ImprovedThe chat API's me query returns the total of unread replies for a launcher badge, and the new-request limit now tells you when to try again.
  • NewAgents can filter the Support inbox by client, by the requester's role and by where the request was opened. Your chat can tag each new request with a source such as web or ios.
  • NewYour users can attach files in your support chat: images, PDFs and text files up to 20MB, uploaded to Revvly through the chat API and checked, scanned and previewed exactly like files your agents attach.
  • NewYour users decide whether they get an email about replies they have not read. Every such email has a link to turn them off, and your chat can offer the same choice with updateMyNotificationPreferences, together with a progress-updates choice that takes effect when progress updates ship. Agents see the choice on each person under Support, End users.
v4.0
2026-10-05
  • NewRevvly Support, v1. Customer requests now have a home in Revvly: your team works them in the Support inbox, and your customers raise and follow them through a chat you build on the support chat API. It covers the agent inbox and ticket screen, assignment and teams, mentions, attachments, live updates, notifications, auto-close, search, metrics and settings, plus customer sign-in with short-lived tokens. Support is switched on per workspace.
  • NewBuild your own support chat on Revvly Support. Your backend mints a short-lived token for the user it has signed in (createEndUserToken, with a support secret key), and your widget or app uses it on the new support chat API to list that user's requests, open one, reply, mark it read and close it. Tokens only ever reach their own user's requests, only work from the sites you list as widget origins, and stop working the moment you revoke the key that minted them. Internal notes and agent names never leave Revvly. Live updates and attachments come next; for now the widget polls. A step-by-step guide, with a complete chat script and a prompt you can hand to an integration agent, is under Guides, Add a support chat to your app.
  • NewTry the chat as a customer before you build anything: the Sandbox link in the Support inbox signs in a practice customer and chats through the same API.
  • NewRevvly Support now has an agent side, for workspaces with Support turned on. The Support inbox has views with counts, full-text search across ticket titles and messages, type, status and team filters, and a preview pane you can move through with j and k. The ticket screen shows the thread with internal notes set apart, an audit trail, a reply and internal-note composer with attachments, and a fields panel for status, priority, assignee, type, team and tags. Edits carry the version you loaded, so if a colleague changed the ticket first you see a conflict banner instead of overwriting them. Changes arrive live, with typing indicators, and a notification bell with per-kind in-app and email preferences keeps you posted. Support, Metrics shows ticket volume and median first response and resolution time by type, agent or day.
  • NewTake a ticket instead of waiting for it to be assigned. New tickets stay unassigned and the first agent to pick one up gets it. If two agents press Take it at the same moment, exactly one wins and the other is told who has it.
  • NewMention a colleague in an internal note with @ and they get a notification. Tickets can also change type and be assigned to a team; changing type carries the ticket's status over to the new workflow without ever closing or reopening it.
  • NewAttach images, PDFs and text files to a ticket reply, up to 20MB. Every file is checked against its declared type before it can be sent, scanned for malware when a scanner is configured, and shown inline only as a re-encoded copy with location data and hidden content stripped; the uploaded bytes are download-only. Uploads that no message ends up carrying are cleaned up after a day.
  • NewThe person who raised a request is emailed when a reply goes unread. If an agent or the AI replies and the requester has not read it after your delay (5 minutes by default, settable from 1 minute to 24 hours), they get one email, with further replies folded into it. It is skipped if they read it, opted out or have no address, and it carries public replies only, never internal notes or agent names. Tickets waiting on the client are also closed automatically after the number of hours you set, and a late client reply always wins.
  • NewAdmins can edit Support settings: ticket types, status workflows and end-user roles, including creating a new workflow. A status is retired rather than removed, so tickets already in it stay valid. A member sees every settings page read-only from the first paint instead of discovering it from a refused save. Support secret keys, used to sign your users in to the chat, are created, rotated and revoked under Settings, Support, Secret keys.
  • NewMy OKRs: a personal worklist in the Strategy section, next to OKR Cycle. It lists the Key Results you own with a check-in button on each open one, puts the ones owed a check-in at the top, and shows the objectives you own and the teams you are on. A draft cycle shows start and target but offers no check-in, the same as the rest of Revvly.
  • NewAdd several Calendly meeting types to booking intake in one go. The settings page used to take one scheduling link per click, and each link is its own route with its own pipeline and stage. The picker is now a searchable multi-select; a link that is refused does not stop the rest, and only the failed ones stay selected so retrying is one click.
  • NewClient pages gain a Commitments card listing what was promised in email, and Settings, AI spend now shows what each AI tier produced, not only what it cost.
  • ImprovedThe sidebar is regrouped around how work is actually done. Customers get their own section above Revenue, with Situations sitting under Clients next to All clients; Support has its own section (Inbox, Metrics) instead of being tucked among the CRM entries; and Templates moves into Settings, where each tab still appears only if the workspace has the feature behind it. Old /templates links redirect to the new place.
  • FixConversation now pages by the date a message was sent, not the date it was stored. A bulk mailbox sync stamps years-old mail as new, so it filled the first page and last week's mail fell below it. Dates outside the current year now show the year too, since Mar 3 alone made an old thread look recent.
  • FixA refused Calendly webhook now reports Calendly's own error text instead of a generic failure.
  • FixEscape now closes only the top layer. With a modal or a dropdown open over a side panel, one press used to close all of them. Confirmation dialogs close on Escape too, leaving the panel they were opened from open, and the page behind a stack of overlays no longer unlocks when the top one closes.
  • FixAvatar initials use the first and last name. Priya Shah showed as PR and Élodie as L, because spaces and accented letters were stripped before the name was split. A deal with no close date on the pipeline board is now a single full-width control that opens the calendar, instead of a wrapped label with a date field beside it.
v3.13
2026-10-04
  • NewAccount situations get four more signals and thresholds you can tune. Waiting on them and Waiting on us separate a normal pause in a conversation from a stall, Going dark flags a contact who has stopped answering against their own reply history, and Champion lost flags when your main contact goes quiet. The old Stalled is now labelled Gone quiet so that Waiting on them means the normal wait. None of these call a model. Settings, Situations lets an admin change the numbers that decide when each one opens, such as stall and dormancy days, how many unanswered messages count, and how many replies before a contact's own pace is trusted. Each shows its default and can be reset, because a deal cycle that runs in quarters and one that runs in days do not share a definition of gone quiet.
  • NewSynced email threads now appear on a client's activity timeline, with subject, message count and direction. Threads that ingestion could not place with a client wait in a queue under the Clients table, where you can link each one to the right client; the section is hidden when the queue is empty.
  • NewSend invoices from a shared accounting mailbox. Connect one Gmail account that belongs to no person, give it its own signature, and pick it as the sender in the invoice composer, which now offers three identities: the application, your own Gmail, or the accounting mailbox. Only workspace admins can connect, disconnect or edit it, and a colleague's client email can never leave from the billing address by accident. The invoice PDF is now attached on both Gmail options; if it cannot be loaded the send fails rather than emailing a client an invoice with nothing attached.
  • NewNew Key Result metrics for leads: leads created per month and per OKR cycle, counted across every pipeline. Metrics that read CRM data are hidden from workspaces without the CRM, and are now refused for them if a key is supplied by hand.
  • ImprovedThe email composer matches Gmail's typography, Arial 13px with one line between paragraphs, in the editor and in the message that is sent, so what you wrote is what the recipient sees.
  • FixSearchable dropdowns scroll to the options below the fold.
  • NewChoose the pipeline when you create or edit a deal. A deal could only move between the stages of the pipeline it was already on, and the add and edit forms had no pipeline picker. When more than one exists, the prospect's Deals card and the pipeline deal drawer now offer one; the deal lands on the target's first open stage or the stage you pick. Going back to a deal's own pipeline restores its own stage, and the move is saved together with the rest of your edits rather than ahead of them.
  • NewDiscount a whole invoice. Discounts could target the base price or a single component; there is now a Whole invoice target, applied last over every line as one group so a fixed amount comes off once. Net MRR, ARR, the cash-flow projection and net NRR all take it off the period total.
  • NewGraduated tier pricing invoices one line per tier. Each tier that billed units now shows its own quantity, rate and description, the lines re-sum to the component total, and a fixed discount is applied once across them rather than once per tier.
  • NewInvite people to Revvly from Slack. Owners send invitations by Slack direct message from the workspace roster, with bots, deactivated, external and guest accounts left out unless you switch guests on; admins request approval and owners approve. An invitation holds no seat. The limit is checked when you send and enforced when the person accepts, through a single-use link bound to their Slack identity and the Sign in with Slack page. You can resend or revoke pending invites, and a reminder goes out on day 7.
  • NewAsk the Assistant what a usage component costs. Asking what extra admin seats cost on Pro used to end with a trip to the dashboard, because the Assistant could only read a plan's base price. It can now list each usage component attached to a bundle or module with its included units, tier or step ranges and per-band prices by region, period and currency, and says whether a price is the plan's own or the catalog default. Also available to Claude and other MCP clients.
  • NewMore Key Result metrics: new accounts per month, and deals created on a chosen pipeline during the cycle. The editor asks which pipeline when the metric needs one, and a pipeline that has since been deleted fails the read instead of quietly reporting zero.
  • ImprovedProspects is now Companies. The page was always the list of company records, and the old name read like leads. It opens on all stages and includes clients; Clients stays as the billing view. Copy that said prospect for a company record now says company, and /prospects redirects.
  • ImprovedConversation loads faster on long histories. It opens with the latest 25 messages and a Load older messages button, pages from a cursor so the cost does not grow with how far back you go, and keeps what you have already loaded when it refreshes.
  • FixA draft you are still writing is never filed in the thread as sent. A draft synced to the mailbox could come back labelled Sent and was shown as sent while you were typing it.
  • FixSent emails keep their lists and bold text. A numbered list was flattened to one two three in the plain-text part, and a sent message could fall back to plain text. Message spacing is now set inline, so mail clients no longer add their own paragraph margins, and a long message scrolls inside the floating composer instead of pushing recipients and Send out of view.
  • FixA failed invoice reminder is reported as failed. A rejected send, or a missing copy recipient, was recorded as success and the screen said the email was sent when nothing arrived.
  • FixTasks on a client or prospect show on a phone. The tab counted them but rendered no rows below desktop width; they now appear as cards. Future pipeline stages are readable in dark mode, and unassigned contact suggestions no longer offer an address the company already holds, which could only fail when added.
  • NewSee and move a deal's stage from the top of the prospect page. When a prospect has an open deal, the header draws one chevron per pipeline stage in board order: stages passed are light mint, the current one solid mint, those ahead neutral. Click a stage to move the deal there; moving to a Won stage asks first, because it closes the deal. With several open deals there is one row each, and on a phone only the current stage keeps its label.
  • NewA pipeline board that is quicker to work. Stages are tinted and borderless, deals sort with no close date first and then soonest, the close date is edited on the card with a red marker when it is missing, and the board has search and a filter by rep. A deal can now be deleted from the board drawer or the prospect's Deals card, with a confirmation that it is permanent. Creating a deal for a company whose domain already exists offers to switch to the existing company instead of failing.
  • NewPipeline, Forecast shows each deal's stage as the same coloured chip the board uses. It sorts in funnel order, exports to CSV and can be hidden, moved and resized like any column. A button on each Company cell opens the company in a side drawer with its Emails and Tasks, so you can reply or add a task without leaving the forecast.
  • NewThe Work queue's account panel lists every open task on the account, whoever it is assigned to, including tasks on its contacts and its deals. It refreshes when a queued action commits, so the follow-up a send creates appears without a reload.
  • NewResend or copy the invitation link for a team member who has not signed in yet. If email delivery is unreliable you can hand someone their setup link directly. People pickers and Team Members now mark pending people as Invited, since they were already valid owners of objectives and Key Results but nothing said so.
  • NewAttach files to the Assistant by dragging them anywhere onto the conversation, in the full page and in the popup chat; a Drop files to attach overlay confirms the target. Upload errors now say why: the API's message, or the storage error. Attachments that no message ends up referencing are deleted after a day.
  • ImprovedObjective and Key Result titles and descriptions grow with their content. On a phone titles were single-line inputs that scrolled out of view and descriptions were fixed-height boxes; they now fit what you typed, while a title still stays one line of content.
  • FixA custom subscription with only a base price can be created. The Custom plan type sent no bundle, module or component, and creation refused it; a base price override, including zero, now counts as something to bill.
  • FixReplying from a Gmail draft actually sends. Sending a saved draft hit a route that did not exist, the message never left, the draft sat in Gmail and the screen said Email sent. Drafts now go out through the normal send, a send the provider refuses returns to drafts with the error and can be resent, the Gmail draft is removed once the send is confirmed, and the toast says Sending until it is.
  • FixEmail triage stops paying to re-ask about messages it cannot decide. An unsure or unreadable answer was treated like a call that never happened, so about 60 messages were billed again on every hourly pass. Those messages are now retired, and a call that gets no response keeps its estimate reserved instead of being released as unbilled.
  • FixFollow-up tasks filed on a contact now show on the prospect's Tasks tab.
  • NewKey Results can read a live Revvly metric instead of waiting for check-ins. Choose MRR, ARR, NRR, revenue churn, expansion MRR, active subscriptions, receivables 60 days or more overdue, or metered usage revenue; the value refreshes every night, goes stale after three failed refreshes, and gets a projected end-of-cycle value with an Ahead, On pace or Behind status. When a cycle is published the live value is read again and frozen as the start. On Analytics, MRR, ARR, NRR and expansion charts draw the target as a line with a pace badge, and Set a target creates a metric-backed Key Result without leaving the page.
  • NewTalk an OKR draft through with an AI coach before you publish it. The coach reads the draft in its own unit, so a percent target is discussed as 5% rather than a bare 5.
  • NewA Templates page for reusable content. It lists every email template you can use, your own and every shared one, with search, visibility and tag filters and sortable columns; a side panel creates and edits them with the composer's editor and Insert field menu, and a colleague's shared template opens read-only with Duplicate. A second tab makes all ten payment reminder emails editable, the four the composer offers and the six the daily sweep sends on its own, with placeholders for client, invoice number, amount, due date, days overdue and your company name, or a reset to the default.
  • NewConvert to client starts from the deal. The conversion wizard pre-fills plan, tier, billing period, component quantities and prepaid term from the prospect's most recent open deal, with a banner on every step saying so, and you still confirm each screen. Deals gain a module tier and a contract length, billing periods paid upfront, and show the price brackets of tiered components. Converting also marks a single open deal Won.
  • ImprovedPayment reminder wording changes. Overdue reminders no longer tell the client to write to a placeholder address; they say to reply to the email, and replies go to your reply-to. Automated emails show amounts as $1,250.00 and dates as September 15, 2026, in UTC so they no longer slip a day, and composer greetings use the full client name instead of its first word.
  • FixA client created by subscription shows in the Clients list. Convert to client only created the subscription, so the company stayed a prospect and the list, which filters on lifecycle stage, never showed it.
  • FixAI spend is tracked per tier. Email triage and commitment extraction shared one ledger row, so their spend and ceiling were indistinguishable and whichever sweep ran last overwrote the other's ceiling. Each now has its own panel on the AI spend page, and a month with no spend yet no longer shows last month's balance under this month.
  • FixScheduled jobs run once per server instead of three times. Every scheduled job, including renewals, invoicing, reminders and the AI sweeps, fired three times per instance, and a paid model call is now made by one process at a time.
  • FixA check-in with no value, from an older Key Result or one recorded while it read a metric, can be edited without typing a value, and the Key Result editor's side rail scrolls with the page instead of inside itself.
v3.12
2026-09-25
  • NewChange a published bundle or module from the Assistant, without a trip to the dashboard. Published catalog entities are immutable, and until now that was a dead end in chat: asking to attach a component to a live bundle, or trim its billing periods, got you a "do this from the dashboard" reply. The Assistant can now branch a new draft version itself — carrying over the source's modules, tiers, attached components and prices — apply your change to that draft, and propose publishing it, all as ordinary confirmation cards. The version you had stays exactly as it was, live and billing, until the new one ships; only one draft can be open per source at a time, so a second branch attempt is refused rather than forking the plan's history. A variable component can be branched the same way, but its structure still has to be edited in the dashboard before the draft is published — chat has no tool for that yet. The same tool is available to Claude and any MCP client with write access.
v3.11
2026-09-25
  • NewReply with the original message included, Gmail-style. A ··· control next to Reply inserts the message you're replying to as a collapsible quote — sender, date and body — so you can write your response inline above it instead of losing the thread's context.
  • NewCreate a subscription through the public API, not only a client. A new createSubscription mutation takes a client (by id or your own externalId) plus a bundle, module or set of variable components, and can seed each metered component's starting quantity — a seat or child count already in place — so the first invoice bills correctly and the usage reports that follow read as deltas from that baseline rather than the whole count.
  • FixThe dashboard recovers on its own from an expired session or a stale workspace context instead of surfacing an error. A bug in the retry logic behind both cases built the retried request but never actually sent it, so the original error reached the screen unchanged even though a silent retry was supposed to fix it.
v3.10
2026-09-24
  • NewWork through your assigned tasks one at a time, from a screen built for it. Tasks used to mean the board or table view — fine for a birds-eye look, not for actually clearing a list, since every task meant leaving for the client record to see anything useful. The new Work queue opens on today's overdue and due-today tasks, sorted by priority, and shows the account it belongs to — MRR, latest invoice and current subscription for a client; stage, deal and description for a prospect — next to the record's conversation history, without navigating away. Email or log a note straight from the task in a composer that opens the moment you need it, then mark done or snooze and the next task is already loaded. Every action applies on screen at once and only reaches the server a few seconds later, so Undo is real — it never has to unsend an email. On a phone the same queue runs one screen at a time, with the composer opening full-screen and Send within thumb's reach.
  • NewRun more than one sales pipeline, and say who can see each one. A workspace could only ever have the one pipeline everybody shared. You can now create additional pipelines — each with its own name, description and stage list — restrict a pipeline to specific people or teams, and view several at once on one board, grouped by pipeline with the set you're viewing remembered per browser. Retiring a pipeline moves its open deals to another one you choose, mapped stage by stage, and a pipeline that still holds deals can't be deleted. Restricting a pipeline is enforced everywhere a deal shows up — the board, the deal itself, its notes, documents and timeline, and the Assistant's own pipeline tools — so a deal on a pipeline you can't see reads as not found rather than revealing that it exists.
  • NewConnect Revvly to your team's Slack. An admin installs the Revvly app from Settings → Slack, Revvly matches your people to Slack accounts by email — confirm, remap or unlink any suggestion — and you choose an announcement channel. Once connected, notifications that used to only ever sit in Revvly's own delivery log can reach Slack directly, with a link back to the record in Revvly on every message. A health check re-verifies the connection every 15 minutes and a banner tells admins if it needs attention; disconnecting, or reconnecting to a different workspace, is one action in Settings.
  • NewSet up who's on a team, and see how many seats your workspace is using. Settings gains Teams (create a team, set its lead, add members) and Roles, alongside a new Seats page that shows how many of your plan's seats are in use and lets you request more — raising an alert to Revvly, with only one open request allowed at a time. New workspaces start with 5 seats; existing ones were capped the same way, at 5 or their current headcount if that was already higher, so nobody already on a team was removed. This is also the foundation the Slack notifications above deliver through: check-in schedules and a delivery log now live under Settings → Notifications.
  • NewMove a deal forward without leaving the prospect. A deal's stage, plan, billing period, close date and an optional chance-of-close can now be set directly from the prospect page, not only the pipeline board — including adding the prospect to a pipeline for the first time. Value can follow the catalog automatically or be pinned to your own estimate, and each pipeline column now totals both its Value and its Forecast (value weighted by chance of close), so a board reads as a real forecast rather than a list of deals.
  • NewAttach files to an email you send from a client or prospect record — up to 5 files, 10MB each — through the composer's Attach button or by dragging them straight onto it.
  • NewAn email you start writing is no longer lost if you close the composer. Typing a subject, body, Cc or Bcc now saves a draft that's pinned at the top of the conversation and synced to your connected Gmail, so it also shows up in Gmail's own Drafts. Reopen it to keep writing, send it, or delete it — deleting now removes the Gmail copy too, and sending a synced draft delivers the actual Gmail draft rather than creating a second copy of it.
  • NewSave an email as a reusable template, private to you or shared with the workspace, and load it back into the composer for the next similar email. Insert a recipient's first name, their company or your own name as a placeholder — with an optional fallback such as {{firstName|there}} — and a value that's still missing is highlighted and blocks sending until you fill it in or remove it, so a template never goes out half-finished.
  • NewSending an email can now raise its own follow-up task. Set a default delay under Account → Email follow-up (3 days out of the box); sending to a prospect turns the follow-up on by default, sending to a client leaves it off with a one-click Add follow-up, and either way you can change the delay or skip it for that one email.
  • NewOpen a PDF, image or text file straight from a client or prospect's Documents tab instead of downloading it first. Word, Excel, PowerPoint and anything the browser can't render still download as before; HTML, JavaScript and SVG are never opened inline.
  • NewA calendar invite on a client's Activity feed now shows the meeting itself — title, time, location, conference link and attendees — instead of just the filename of the attached .ics file. A calendar invite arriving by mail is matched to the client the same way a Calendly booking already was, and no longer files as a plain document.
  • NewThe workspace-wide Contacts list now shows who each person works for. An unassigned contact shows Revvly's best-guess suggestion — same domain, ranked by how often you've heard from them — with a one-click Add, and you can edit or delete a contact straight from the list rather than opening the company record.
  • FixSynced mail now relinks after a CRM import. Importing contacts from a spreadsheet after a mailbox was already connected left the mail that had synced first stuck unresolved, because linking only ever happened once, at the moment a message arrived. A successful import now goes back over unresolved mail and files it against the new contacts, without re-syncing the mailbox.
  • FixDeleting a compose draft now deletes it from Gmail too, instead of only the local copy. A failed Gmail delete used to be swallowed silently, leaving an orphaned draft in Gmail with no stored id to find it by on a retry.
  • FixA task's company picker now reaches past the first page. Linking a task to a company only offered the first 200 (alphabetically), with no search, so a company further down the list couldn't be selected at all — and a task already pointing at one of those companies showed a blank chip instead of its name.
v3.9
2026-09-21
  • NewBring a spreadsheet of people and companies into the CRM in one pass. Adding contacts one record at a time was the only path, so a list you already had — a conference export, a customer success sheet — meant typing it in again. You can now upload a CSV or Excel file, map its columns, preview the rows, and import them: companies are created or matched, contacts land on the right record, and a large file is split and run from the bottom up so a mid-file failure does not lose the rows already written. Progress is visible for the whole run, column matching is fuzzy rather than exact-name-only, and a file that would have been refused for size is accepted up to 50MB.
  • NewAdd the rest of a company's people without typing their addresses. Opening a client to add contacts meant remembering who else works there, even when Revvly had already seen those addresses on mail or held them as unassigned contacts. The client's Contacts tab now suggests people at the same domain — unassigned contacts, and addresses that appear in email traffic, ranked by how often and how recently they show up — and you can add one or all of them. An address already held by anyone in the workspace is never suggested, and the domain is checked again on write, so a suggestion cannot quietly attach someone from another company.
  • NewRecord meetings on a client the same way you record notes and mail. A call that happened, or a Calendly booking that is about to, had nowhere to sit on the account besides a note somebody might write. A client now carries meetings — scheduled, held, no-show, cancelled — with attendees, location and a conference URL, whether you log one by hand or Calendly posts it. The same meeting reported by more than one source is one record, not two, and a later update does not overwrite a field a person already set.
  • NewRead the mail that was synced to a client, not only the mail Revvly sent. Ingested mailbox threads were stored and triaged but had no dashboard surface, so the intelligence work had nowhere to be seen. Synced mail now appears on the client alongside the mail you sent from Revvly: you can open a thread, read the body, and it sits on the CRM timeline with everything else. Conversation and Gmail stay behind the CRM flag, so a workspace that has not turned CRM on does not grow a mail surface it cannot use.
  • ImprovedEvery mutating Assistant action needs its own approval. A card you had already confirmed could be treated as cover for a later write on the same turn, so a second mutation could ride through on the first click. Each mutation is now a separate proposal: approving one does not approve the next, and a stale proposal whose underlying record has moved since it was staged is refused rather than writing over someone else's edit.
  • FixLooking at a sent email in Conversation no longer counts as the recipient opening it. The stored HTML still contained the read-receipt image, so opening the thread fetched the pixel from your browser and the live open count climbed — Opened 335 times — while nobody on the far side had seen the mail. Tracking pixels are stripped before the body is returned and again in the dashboard, and a pixel fetch that comes from the dashboard is ignored, so an operator reading a thread is not an open.
  • FixA tracked send that nobody has opened now says so, instead of looking like a send with no status. Email History treated "no opens yet" the same as "we are not tracking this", so a message that had left and not been opened had nothing to show. Pending and failed sends stay quiet; a delivered tracked send with no opens shows Not opened.
  • FixDocuments on a client stop duplicating every time you open the tab, and a file you uploaded is actually downloadable. Filing mailbox attachments keyed a document on the message rather than the client, so visiting Documents wrote another copy of the same file; a download link that the storage layer could not serve still offered itself and then 500'd. Filing is now one document per client per message, lists page on a stable cursor, and a file that cannot be downloaded says so instead of failing when you click.
v3.8
2026-09-15
  • NewRebuild a client's subscriptions from the invoices they already have. Importing a customer with years of billing history meant deciding the plan shape by hand, then hoping the invoices would attach. Revvly now clusters a client's own invoices into the subscriptions they imply, proposes the catalog versions those charges match, and can create both the catalog and the subscriptions rather than leaving you to reconstruct the relationship in a spreadsheet. The review queue is ordered as a curriculum — one product shape at a time — so you are not asked about every invoice in a pile, and a half-reviewed import can be resumed instead of started again.
  • NewLeave a usage component off one subscription even when the plan includes it. Auto-included components on a bundle or module were all-or-nothing: every subscription that pinned the plan received every included meter, so a customer who should not be billed for one of them had no honest setting. You can now exclude an auto-included component from a single subscription at creation and afterwards. Metering and invoicing skip it; including it again restores the pin without inventing a second copy.
  • NewWrite the email signature once, and see what it will look like. Signatures were HTML you edited blind, or nothing, so every send from a workspace either had no sign-off or whatever someone had pasted. You can now author a signature visually or as HTML, preview it, and it goes out on the mail Revvly sends.
  • NewWatch a send land, and whether it was opened, without leaving the dashboard. Delivery lived in the email provider and opens lived in a tracking log, so the question "did they get it, and did they read it?" meant leaving Revvly. Delivery status and read receipts now stream into the dashboard as they happen, on the thread and on Email History.
  • ImprovedEvery field on a client is editable from the edit modal. Several client properties could only be set at creation, or only on a different screen, so correcting a region, a prefix or a payment term meant hunting. The edit modal now covers the full record.
  • ImprovedThe email composer goes full-screen on a phone, and a new dashboard version applies itself when you next load a session rather than interrupting the one you are in.
  • FixBrowser uploads to storage work again. A recent AWS SDK change started sending a checksum header S3 rejected unless the bucket allowed it, so choosing a file in the dashboard failed even though the same upload from the server succeeded. Bucket CORS and the presign now match what the browser actually sends.
  • FixA client's ARR is the billed period, not the rounded monthly figure times twelve. Deriving ARR from MRR re-rounded a number that was already rounded to the currency's minor unit, so a $100/quarter subscription showed MRR of $33.33 and ARR of $399.96 — four cents short of what is actually billed. ARR now comes from the period cost directly, and the two cards agree.
  • FixRenaming a plan no longer rewrites the name of every past period on its history. A catalog rename is about the plan going forward; periods already billed kept being relabelled with the new name, so the history of what the customer was on at the time became the history of what the plan is called today. Past periods keep the name they were billed under.
  • FixA subscription dated in the future can open its usage accumulators. Creating a subscription whose start is still ahead of today left metered components unable to accept usage until the start date arrived, so an integration posting ahead of go-live was refused. Accumulators now open with the subscription, and usage posted against a not-yet-started period is held rather than rejected.
v3.7
2026-09-09
  • NewSell a year upfront on one invoice. A customer who prepays several periods used to mean either one manual invoice and a subscription whose renewals kept billing anyway, or a fake annual plan that reported the wrong MRR. A subscription can now carry a prepaid term: pick how many periods are paid at signing and Revvly raises a single invoice for the whole span, itemised as quantity times the period price with a service period covering all of it. Every renewal inside the span raises no plan charge, and the base fee resumes on its own at the first renewal past the end — nothing to remember and nothing to switch back on. MRR and ARR are unchanged, because the payment schedule is not the contract: a customer who prepays a year reports exactly what a monthly one does. Metered components keep metering and keep billing period by period, so a usage-only invoice arriving inside the span is expected rather than an anomaly, and the cash-flow forecast shows the prepaid cash once at signing rather than spread across the periods it covers. A prepay incentive is applied as a discount rather than as a lower price, so the day the span ends the portfolio does not show an unexplained expansion. Switched on per workspace.
  • NewSign a deal weeks before the customer goes live. Contracts signed ahead of a go-live date had nowhere to sit: dating the subscription at signature started billing and the clock early, and dating it at go-live left the deal invisible until then. A subscription can now be created for deferred activation — any share of the first period from nothing to all of it billed at signing, plus a one-time setup fee on the same invoice — and it waits. While it waits it counts for nothing: out of MRR and ARR, out of active counts, skipped by the renewal sweep, and usage posted against it is refused with a message telling the integration to activate first. Its start and end dates are shown as provisional, because they are. Going live is one deliberate action that bills the remainder of the first period, re-anchors the term to the real go-live date and starts recurring billing from that day, so period two renews a cadence after go-live rather than after signature — and the customer's acquisition is recorded on the go-live date, so a deal signed in March and live in June lands in June's new business. Clicking twice raises no second invoice. Nothing signed gets forgotten either: set an activation deadline and the Renewals page lists everything still waiting, worst-overdue first, raising one alert and one assignable task rather than a nightly repeat. A deal nobody has switched on is never auto-activated into billing and never auto-cancelled out of the book. Switched on per workspace.
  • NewGive money back with a credit note. Correcting an over-billed invoice meant editing a document the customer already had, or nothing at all: a mid-cycle downgrade computed its negative proration and dropped it, and a refund was a note to somebody's future self. You can now raise a numbered credit note against any issued invoice, paid or not, with a reason and a line per thing being credited, capped at what that invoice was raised for. It is a real document with its own number and PDF, and an unapplied credit reduces what the client owes the moment it exists. Then it is spent or paid back: apply it to one of the client's open invoices, or record the cash refund with the date the money actually left and the bank reference. Neither is a quiet edit — collected cash nets out a settlement made with credit rather than money, and a refund shows as cash genuinely leaving, so the month reports what was banked. Credit notes are never chased: no due date, no aging, no dunning. Two paths now raise one for you, a mid-cycle downgrade and a refundable prepaid term ended early, and the guardrails are real — a credit cannot exceed its invoice, cannot be spent twice, and cannot be refunded and applied for the same money.
  • NewRecord the contract a subscription is sold under, and let it govern the renewal. An annual commitment billed monthly had nowhere to live: twelve months in a spreadsheet, and a renewal engine that treated month thirteen exactly like month two. A client file now carries its contracts — SOW, MSA, amendment — with the term start, its length in months, what happens when it ends, and what leaving early costs. Attach one to a subscription and the committed term starts governing the boundary; nothing about the price, the cadence or any already-invoiced date moves. At the committed end the contract decides: an auto-renewing commitment rolls into its next term, keeping the signing date fixed so which year of the contract you are in is still answerable; one that simply ends does not renew past the boundary; and one that renews unless notice is given raises a single item in the renewal approval queue as soon as the notice window opens, and holds the boundary until somebody decides it. A contract narrows a renewal rather than forcing one, so ordinary period boundaries inside the term stay with the subscription. Terms that cannot be honoured are refused rather than half-applied: a term the billing cadence cannot divide, a commitment outliving a subscription that is already set to end, or a second contract over one already committed.
  • NewSay what ending a subscription early costs, and be asked at the moment it matters. Cancelling inside a committed term with periods still uninvoiced now asks for a policy and refuses to proceed without one, stating the exposure first — how many periods remain, when the commitment ends, and what is owed. Charge the remainder invoices it as a one-time termination fee that never enters MRR; keep billing holds the subscription open to the committed end so every month of revenue is backed by a real invoice; waive charges nothing and records the write-off on the cancellation, so a waiver reads as a decision rather than an oversight. The contract supplies the default, and whoever cancels can override it — the contract is what was agreed, the cancellation is what happened.
  • ImprovedA plan change inside a prepaid span now asks about the cash instead of guessing. Proration alone would charge the price difference for the current period only, because every remaining prepaid period bills nothing — so the rest of the span would silently keep the old price. The change now offers two answers: charge the difference now, which raises one catch-up invoice covering the rest of the current period plus every whole period the prepayment still covers, or bill nothing more until the span runs out. Downward, charging now is a credit note, symmetrically. The plan changes immediately either way and MRR moves with it; this decides cash only, and the catch-up is booked as a one-off charge rather than a rate, so nothing restates MRR at a figure no renewal will charge.
  • ImprovedMonth-end billing dates now hold their day instead of drifting past it. A subscription anchored on the 29th, 30th or 31st used to have its renewal date pushed past the end of a short month — a 31 January boundary became 3 March, and every following renewal kept the 3rd, so a deal sold as month-end quietly stopped being one. Renewals now clamp to the last day the month actually has (31 January to 28 February) and return to the original day as soon as a long enough month comes round, which is what the first period end has always done. This is a change you may see on live subscriptions: one still sitting on a 29th, 30th or 31st boundary will next renew up to three days earlier than it otherwise would have, over a correspondingly shorter period. Nothing is billed twice and nothing is skipped, no already-invoiced date moves, and a subscription whose date had already drifted is left exactly where it is rather than being pulled back to a date the customer has not been invoiced on for months — restoring an original month-end anchor is an edit you make on that subscription, not something we do on your behalf.
v3.6
2026-09-07
  • NewBuild a whole pricing plan from one approval. Creating a metered plan meant approving every step of its dependency chain separately — a metric, the usage component built on it, publishing that component, the module or bundle, its base prices, attaching the component, publishing the plan — each its own confirmation card, because each step needs an id only the step before it can mint. A new "build a plan" action now runs that whole chain from a single approval: a case that took thirteen approvals now takes two, one per plan. Because one click now creates and publishes several entities and publishing cannot be undone, the confirmation card lists every write it is about to make, numbered in order, before you approve it. The step-by-step tools are unchanged and remain how you make edits or one-off changes.
  • NewLet Claude, or any MCP client, create records in Revvly — not just read them. MCP access was read-only, so asking an external client to set up a client or a plan meant doing it by hand afterwards. The mutating tools — creating a client or subscription, and the catalog's create, publish and price actions — now stage a proposal and hand back an action id instead of writing immediately; a follow-up call executes it, and a client can supply an idempotency key so a retried confirmation replays the first result instead of repeating the write. Write access is its own OAuth scope or API-key level, requested and granted explicitly — never turned on for a client that only asked to read.
  • NewEnter or waive missing usage from chat, or through MCP. A closed metered period billed in arrears holds its invoice until someone enters the quantity or decides to waive it, but only the dashboard's bulk usage grid could do either. The Assistant and MCP clients can now list every reading still waiting on a person and then enter a quantity or waive a period with a reason, proposed as the same confirm-before-write cards every other Assistant action already uses.
  • NewReopen an archived past catalog version instead of being stuck with a mistake in it. A historical version of a bundle, module, or usage component could be authored but never revisited afterwards — archived rows were hidden from the catalog list, version history was not clickable, and once a past version filed there was no way back into it. Any version already sitting archived can now be reopened in place, at the same id and effective date, and re-published without touching the current offer; the version currently live stays immutable exactly as before, and changing it still means authoring a new one. A historical draft can also pin any past version of a component, including switching its pricing model — a seat count that used to be volume-tiered before this year's flat rate, say.
  • ImprovedThe Assistant stops asking you to confirm something you already approved. A confirmed action's result read identically to a plain lookup, so on the next turn it could hedge a finished write back into "please confirm this in the card" language for something already done — having just clicked Approve, you would then type confirm into the chat as well. Every confirmation result is now stamped with whether it was approved, declined, or expired, and whether it actually ran, so the Assistant's next message reflects what happened instead of re-asking for it.
  • ImprovedOnboarding's setup steps stop repeating themselves. "Set up your products" and "Add your first clients" showed the same instructions twice — once under the step header, once again inside the chat panel below it. They now show once, with the chat panel given the space that freed up.
  • FixThe website support chat can now find its own MCP documentation. A plainly-worded "how do I connect Claude to my account" skipped the documentation search entirely and answered from memory, inventing a URL that was never the real one, even though the question is documented. Documentation search now always runs on a website chat's first reply, and the page-content extractor now reads values that dynamic pages like this one build from data rather than only literal text, so the real endpoint and its setup steps are in what gets searched.
  • FixA rate change scheduled for the next renewal no longer restates this period's MRR and ARR today. Scheduling a per-client rate for the next cycle is meant to take effect at that renewal, but every reporting path — the live figures, the daily snapshot, and the discount-reduction calculation that reads them — was already valuing the subscription at the new rate: a contract billing 6,000/yr and dropping to 500/yr at its next renewal briefly reported an ARR of 500 against an invoice that had actually billed 6,000, and a discount figure briefly carried the entire difference as though it had been granted. Every reporting path now values a still-pending rate change at the rate it is replacing until the renewal it takes effect at has actually passed, and a rate overridden twice before that renewal now resolves to the rate genuinely in force rather than one that was itself scheduled and never billed.
  • FixA client's very first per-client rate is now recorded on its price history. Every later change to a per-client rate was logged, but the first one — set when a component was attached with its own price, or when the subscription was created with one — never was, so the audit trail could show a rate changing out of a value nothing on record explained. Both entry points now log the opening rate against the catalog price it replaced, so the history reads the same way from the first override onward.
  • FixThe price-resolution walk now answers for the term you are actually billed on. The standalone inspector — the page built to answer "why is this billed at $X" — built its query without the subscription's billing term, so on a quarterly or yearly subscription it reported the term-agnostic fallback rate, or no price at all, instead of the rate invoices are actually rated from. It now resolves the same pinned term the subscription's own detail page and its invoices use, and names which term it answered for.
  • FixThe graduated-tier price editor on a bundle or module shows tier inputs again, not a single flat rate. Setting a graduated-tiered component's price from a bundle or module opened a flat-rate form with one price box instead of a row per tier, because the query behind it asked for a field GraphQL rejects outright and silently fell back to the wrong pricing model. Tier rows now render correctly and prefill from the component's own core price when the bundle or module carries no override of its own, so an unset cell is never mistaken for a zero rate.
  • FixThe subscription detail page and its price-resolution walk are usable on a phone. Both pages rendered wider than the viewport with no way to scroll to the rest, so the resolved price on each component and several billing tables were simply invisible below desktop width. The layout now fits, and Usage readings, Usage this period, and Current period billing scroll within their own row rather than disappearing. The client page's subscription panel now also links straight through to a subscription and its price walk, which it previously had no way to reach.
  • FixFinance's Drive-import review tables show up on mobile. The Unmatched and Discrepancies tabs — invoices imported from Google Drive still needing a subscription, and PDF-versus-spreadsheet mismatches — rendered nothing but a title below desktop width, the same table gap already fixed on Finance's other tables. Both now stay visible and scroll at any width.
  • FixFocusing a text field on an iPhone no longer zooms the whole page in. iOS Safari zooms the viewport on any form control smaller than 16px and does not zoom back out on its own, and the dashboard's inputs, selects, and text areas are all sized below that on purpose for density — so every field you tapped left the layout magnified until you pinched back out. Touch devices now get 16px form controls; desktop keeps the denser sizing exactly as before.
  • FixA region you just created during onboarding shows up immediately, not after a refresh. Adding a region relied on a follow-up network round-trip to bring it into the list, so it could take a moment — or a manual reload — to appear where you'd pick it next. It's now written straight into the list the moment it's created.
v3.5
2026-09-01
  • NewPut a client on a plan you no longer sell — on purpose. A new Add a past version action on a bundle, module or usage component's version history lets you author the version that used to exist — last year's price, an older module set, a metering model you've since restructured — starting from whatever was in force closest to the date you give it, so you edit something real rather than a blank form. It publishes Archived, a closed window in the plan's history that leaves your current offer untouched. Put a new client on it from the subscription picker's Show retired plans toggle, or move an existing one there with Migrate; either way Revvly requires a reason, so the pin reads as a decision someone made rather than a subscription nobody got round to updating, and it is left out of the outdated-pins queue accordingly. See Price a client on an older version in the docs.
  • NewReconstruct a client's whole plan history in one pass, not just their current plan. Setting up a subscription that predates Revvly no longer means starting them on today's plan and losing everything before it: enter each plan change since they actually signed — oldest first, each dated — and Revvly treats their history as a sequence of periods rather than one current plan. Ask it to also backfill the invoices for those elapsed terms and each one bills at the plan and price that was in force for its own period, so a 2023 month invoices under the 2023 plan at the 2023 price and your revenue reports show the change where it actually happened, not all at once today. The whole list is validated before anything is written, so a mistake partway through does not leave the earlier changes recorded on their own.
  • NewDefault your invoices to due on receipt. Tenant-wide default payment terms accepted 1–365 days only, so a workspace that wants every invoice due immediately had no way to set that as its default — only a per-client override or the per-invoice picker could. General Settings now offers a mode select, due on receipt or a number of days, matching the wording the client record and invoice screens already use; the invoice PDF, invoice detail page and create-invoice modal all treat a 0-day term as due on receipt rather than misreading it as unset or defaulting it away to 30.
  • NewSee what a discount actually saved, on the invoice itself. A discounted invoice now closes with Subtotal / Discounts / Total due instead of a bare total, so the saving is one figure rather than something you add up from the per-line deductions yourself; this also fixes the amount column, which previously printed the post-discount total above the discount rows and read as though the discount had been taken twice. Usage charges that come from a subscribed module or bundle are now drawn indented under that item's base line rather than listed loose at the bottom of the invoice, so a plan's metered add-ons read as part of the plan rather than unrelated extra lines. Both changes are presentation only — line items, amounts and totals are unchanged, and a legacy or non-standard invoice that cannot be regrouped renders exactly as it did before.
  • NewReopen a paid invoice as unpaid. An invoice settled by mistake — a bounced transfer, a payment matched to the wrong invoice, a wrong click — had no way back, since Paid was a terminal state. Unticking "Mark as paid" on the invoice now reverses the settlement: it returns to Pending or Overdue as appropriate, drops back out of collected-cash figures, and the amount already recorded is reversed on the payment ledger rather than erased, so the invoice can still take a fresh payment later and the record of what happened is not lost. Paid to Cancelled remains refused, since voiding an invoice that collected money is a credit note, not a status change.
  • ImprovedRetired plans read as one plan across time, not a list of unrelated versions. Wherever you can show a plan's past versions — the new-subscription picker on both surfaces that offer it, including the "+ New subscription" modal opened from a client page, which previously had no legacy-pricing controls at all — they now group by the plan itself, the version on offer pinned in place and its retired predecessors laid out newest-first beside it. A version's number no longer stands in for its place in time: it reflects the order it was authored, so a price you author today for 2023 can carry the highest number in its plan while being the oldest version on the timeline. Ordering is always by the date a version took effect.
  • ImprovedAn ended subscription shows what it was worth, not a dash. The client's Subscriptions tab previously showed em dashes for Base, Component and Total MRR once a subscription ended, even though the row describes a specific contract and "what did this account run at" is a real question for one that closed years ago. It now reports its own run rate, valued at the last moment it was live — its end date once its term has closed — while every portfolio-level figure (the Clients list, cash-flow projections) still excludes ended subscriptions exactly as before, so a closed contract cannot creep back into forward revenue.
  • ImprovedThe new-subscription wizard surfaces a backdated catch-up decision instead of hiding it. Starting a subscription more than one full billing term in the past used to leave the choice — bill the missed terms, or start clean from today — in an easy-to-miss unticked checkbox. A start date that misses one or more full terms now flags it directly under the date that caused it, marks the settings step in the rail with a warning, and requires an explicit answer before the subscription can be created: the recap reads "Not chosen yet" until you pick one, since an unticked box looked identical to never having seen the option. Each wizard step also now opens scrolled to its own top rather than wherever the previous step left off.
  • ImprovedBundle and module editors gained a single menu for version history, discarding a draft, and deleting, replacing icons that were scattered across the header.
  • FixHistorical MRR no longer inflates from subscriptions that no longer exist. A deleted subscription, or one imported and marked expired without ever recording a churn event, left its variable revenue permanently counted into every past month's total instead of only the months it was actually active — invisible until the point it should have dropped out, where it read as a sudden, unexplained cliff. Historical variable MRR is now reconstructed the same way the base figure and NRR already were: scoped to the subscriptions genuinely active at each date. Affected historical points have been corrected.
  • FixPricing a tiered, stairstep, overage, or committed-overage usage component from the module or bundle editor works again — it previously failed for every pricing model except a flat rate. Once fixed, those same components briefly showed as unpriced on their catalog cards even when correctly configured; cards now show the entry rate for the tier or step that applies first, prefixed "from" so it reads as a floor rather than a flat number.
  • FixCreating a subscription by naming a single module on the singular moduleId field is now honoured consistently. Depending on the path, that field alone could previously be rejected by the must-bill-something guard, let a draft or archived module be sold because publication was only checked against the plural field, or attach none of that module's metered components because the auto-include lookup only read the plural field too — silently leaving usage unbilled.
  • FixThe new-subscription form no longer overstates the recap total for arrears components. A component billed in arrears is invoiced on the first renewal, never on the start invoice, so summing every projected charge into one recap total made it look like money that was never actually due today. The recap now shows the recurring run rate and, when any charge is deferred, a separate start-invoice figure naming what is held back and why; a component's billing-timing override for that subscription and a discount capped at the value of the line it targets are both honoured in the split.
  • FixA subscription can no longer be created with a component that has no price in the currency you are billing in. The create-subscription form now flags an unpriced component and blocks submission, rather than letting the subscription save and only surfacing the problem later, as a failed invoice.
v3.4
2026-08-17
  • NewMetered usage now closes into a reading before it bills. Every component whose quantity resets each period — API calls, tokens, transactions, anything consumed rather than held — gets a usage reading per billing period: the accumulated total captured at the moment the period closes, before the live counter resets. A reading has to reach a settled state before an invoice carrying it can be issued, so a metered period is either measured or explicitly decided by a person, never billed on a number nobody looked at. A period fed by an integration stays open for a grace window after it closes (a day by default) so late events still land, then seals itself. Standing quantities such as seats or licences are unaffected: they carry forward as they always have and bill without waiting on anything.
  • NewAn invoice waiting on usage now exists, and says so. A renewal that cannot be totalled yet is created as a draft rather than issued early or silently skipped — no invoice number, no dates, no payment status — so it stays out of receivables and AR aging and never ages into Overdue while nobody owes anything. Finance has a new Awaiting tab listing every held draft, oldest first, with the client, the amount so far, the metered period, why it is held and how long it has been waiting; anything past a week is flagged. Each row links to the invoice and to the subscription that will release it. Once the usage is captured or waived the draft issues on its own, taking its number and dates at that moment, so invoice numbers stay in issue order. A draft that is abandoned is voided rather than deleted, because the record that a period was expected to bill and did not is exactly what an audit needs.
  • NewEnter, correct, or waive usage from the dashboard. A new Bulk usage entry page lists every open reading across the workspace — client, component, plan and subscription on each row — so a month of manual meters can be worked in one grid instead of one subscription at a time; it is linked from the client page and the Subscriptions tab. A sealed reading can be corrected with a reason up until its invoice issues, and a period you have decided not to bill can be waived with a reason, which releases the invoice and charges nothing for that period. Revvly raises a task for each period that needs a person — one kind for a manual meter awaiting entry, another for an integration that has gone quiet — so the work lands in Tasks with the client attached, and the Subscriptions list gains a Pending update badge and a matching filter.
  • NewSay what silence means, per component. An unreported metered period is genuinely ambiguous: a broken integration and a customer who used nothing are indistinguishable from the counter, so by default Revvly holds the invoice and asks a person. For components where zero is the ordinary outcome — overage on a plan a client rarely exceeds, a pay-per-incident charge that is empty most months — that produced a held invoice and a task every period, for every such client, and the only move was to waive it having learned nothing. Each component now carries an unreported-usage policy: Review, the default and the previous behaviour, or Zero, which seals an empty period at zero and lets the invoice go. Separately, one component on one subscription can be pinned to API or manual capture regardless of the client's default, with a reason kept for audit — for the client who integrates most of their meters and reports one by hand.
  • NewSee where the current month actually stands. The MRR trend's current-month point is a forward run-rate, while the movement breakdown reads the event log, so early in a month the flows read flat or negative against a stock that was already looking ahead: the month appeared to be declining when it was on track, and the drill-down looked broken because it was empty. A new current-month panel separates the two outright — opening MRR, confirmed MRR as of today, and projected month-end — with each movement (new business, expansion, reactivation, contraction, churn) split into what has actually happened and what is still scheduled. It also shows how much of the month's renewal base has already processed and lists the subscriptions at risk from an overdue renewal or a payment problem. Earned figures are drawn solid and scheduled ones dashed, and the trend chart marks the month still in progress.
  • NewChange a team member's role. Settings → Team members can now move someone between admin and member from the row menu, on desktop and on mobile, alongside deactivate and reactivate. Revvly refuses any edit that would leave the workspace with no active admin — by demotion or by deactivation, including two admins being changed at the same moment — so a workspace cannot be locked out of its own administration.
  • NewTasks separate what is still open from what is finished. Open tasks (To do, Doing) sit at the top sorted by due date with overdue first, and default to a focus window of overdue plus due today; switch to All dates to bring in everything undated. Closed tasks (Done, Cancelled) sit below, most recently closed first, showing today's by default with Show closed for the full history. The two sections page independently. The board got the same attention: cards order by due date then priority, a task can be completed straight from its card and moves to Done, the columns scroll rather than the whole page, table columns sort, and the view you are on is now in the URL so it can be linked and survives a reload.
  • ImprovedPipeline stages are findable, and usable on a phone. Editing stages was an unlabelled gear icon whose meaning lived in a hover tooltip, which never appears on touch, and the editor did not fit a phone: each stage was one non-wrapping row whose fixed-width controls already claimed more than the viewport, leaving the name field a sliver. The button now reads Stages, rows reflow onto two lines on small screens, and the drag handle is dropped there in favour of the up/down buttons that actually work on touch. The editor also has its own address at /pipeline/stages, so it can be linked rather than only clicked into. The command palette was missing the whole CRM group — Tasks, Prospects, Contacts, Pipeline and Pipeline stages are now searchable, with the same feature gating the sidebar applies.
  • ImprovedThe Assistant no longer sends you to a page that does not exist. It was told to point you at the exact screen for a task and link it, but had no inventory of real ones, so it invented paths that landed on the 404 page. It now carries the actual list and will describe where to go rather than guess at a link.
  • ImprovedRead your usage back through the API. Two documented read endpoints — current state (current, peak and cumulative counts) and the paginated audit log, each entry carrying the idempotency key that produced it — so an integration can reconcile against Revvly after a half-finished run instead of re-posting and hoping. Both are bearer-only, with no signature or idempotency key required, and are filtered to the key's scope. The integration guides now also state the rules that apply to every Revvly call (auth, rate limits and Retry-After, scoping, tenant isolation) up front, and there are new guides for signed event batches, the invoice-payment webhook, and capturing metered usage end to end.
  • ImprovedThe analytics dashboard is dramatically faster on a large book. Valuing a workspace issued roughly ten database round-trips per subscription, six of which re-read the same handful of catalog rows for every one — thousands of round-trips returning the same few documents. Those reads are now batched up front and shared across the whole calculation. On a thousand-subscription book the projection walk went from about 10,000 queries and 13 seconds to 11 queries and under half a second, and the ARR calculation from about ten seconds to under one. The cost is now near-flat in the size of the book rather than growing with it.
  • ImprovedEnding a subscription is clearly distinct from deleting one. Ending leaves it active and billing to its end date and simply stops it renewing; deleting removes it. The action is named and worded for that everywhere it appears — the Subscriptions tab row menu, the view panel, the edit modal and the subscription page — and an ended subscription reads "Ending in Nd · no renewal" under its status, so it is not mistaken for one that has already expired.
  • ImprovedThe deprecated Pricing section has been removed. Pricing rules, missing prices and price combinations were a legacy surface superseded by the Catalog and the price inspector. The sidebar entry and command-palette targets are gone, and old /pricing links now land on the Catalog.
  • FixUsage expansion and contraction land in the month the usage happened. Metered components billed in arrears are invoiced on the renewal that closes a period, so booking their movement on the invoice date recognised a month's consumption a full cycle after the base revenue for that same month — on a calendar-aligned monthly subscription, July's usage surfaced as August expansion. Movement is now attributed to the service period it was measured in, while the audit date stays the day it was recorded. Every analytics window, the point-in-time reconstruction, the drill-down and the daily snapshots read the same field, so the chart, the modal and the total no longer disagree with each other. Two related errors are fixed alongside it: a customer whose consumption fell to zero recorded no contraction at all and was reported by NRR as fully retained, because "billed nothing" was being read as "meters nothing"; and churn now reverses the usage baseline that was actually accumulated rather than a fresh projection, so nothing is left stranded. Historical events were backfilled.
  • FixA tenant is only ever taken from something that authenticated it. An API key is the authority on its own workspace: a matching X-Tenant-ID header is redundant and a conflicting one is now refused rather than honoured — previously it could redirect an API-key request's ambient workspace to one the key had no claim to. A signed-in user must still be a member of any workspace they name, and a request carrying no credentials at all now selects no workspace instead of being taken at its word. Explicit workspace handling on the public GraphQL API and the usage endpoints was never affected, which is why this was silent rather than an outage.
  • FixThe external usage API works again for API-key clients. Every request to /api/v1/usage returned "Tenant context is required" — external usage ingestion was unreachable for any customer integration, on every endpoint. Requests now establish their workspace before routing, and the usage endpoints thread it explicitly on top of that. The same gap had also quietly switched off a second isolation check on anything those routes touched; that is closed with it.
  • FixPosting usage by meter slug resolves. The component wizard — the normal way a meter comes to exist — never wrote the slug field the usage API matches on, so every wizard-created meter answered 404 to a customer posting by variableSlug, breaking the documented path for every existing workspace. Slugs are now derived from the meter type on every creation path ("API Requests / month" becomes api_requests_month) and have been backfilled for meters already created. A slug you chose yourself must still be unique and is refused if taken; a derived one that collides quietly takes the next free suffix, since you never chose it and the wizard does not expose the field.
  • FixSub-cent rates print at their real precision. Metered pricing is routinely fractions of a cent — $0.001 per email, per call — and showing it at two decimals rounded it to $0.00, producing invoice text that contradicted itself: "1000 × USD 0.00 = USD 1.00". Rates now widen to as many decimals as they need on the invoice PDF, the invoice detail page and the pricing breakdown. Charges and totals stay at two decimals, because that is what is actually billed. The amounts were always correct; this is the label they carried.
  • FixA multi-module plan bills one line per module. A subscription with two or more modules invoiced them as a single combined line naming all of them and carrying the whole base price, so a client could not see what each part cost — "Subscription: Analytics, CRM $500" rather than Analytics $300 and CRM $200. Each priced module or bundle now gets its own line, named after it. Totals are unchanged; this is a presentation split, not a re-price. The lines remain one discount target, so a fixed "$50 off the plan" comes off the plan once and is spread across them rather than charged off each. Where the split cannot be reproduced faithfully — a legacy invoice, an operator-set lump-sum base price, or parts that do not add up to the total — the combined line is kept. Invoices already issued are not rewritten; pending ones take the new shape the next time they are regenerated.
  • FixA renewal no longer silently drops a metered component it was contracted to bill. Where a subscription owed an arrears metered charge but nothing was tracking its usage — after a migration that swapped components in at the renewal boundary, or an initialisation that failed — the renewal issued the base charge alone and the component vanished from the bill, leaving an under-charged invoice sitting in receivables with no indication it was incomplete. The invoice is now held with that component named as the reason, and a renewal that applies a scheduled migration starts tracking the new plan's components before it bills, leaving out the ones joining at the boundary since they measured nothing of the period being closed.
  • FixOne component that cannot be priced no longer empties the analytics dashboard. The whole book is valued in a single pass, so a single component with no resolvable price in the subscription's currency — or a mis-shaped rate — rejected the entire calculation and took the dashboard down for every other client, and did the same to the daily snapshot, leaving a hole in the trend every historical metric reads from. A row that cannot be priced is now left out of the display figures and reported rather than dropped in silence: the dashboard names what it excluded, so a total that is quietly low is visible as one. Billing paths are deliberately unchanged — an invoice still fails loudly rather than under-billing.
  • FixBulk usage submissions no longer fail with an unexplained 502. Revvly's idle-connection timeout sat below the load balancer's, so the balancer could write a request into a connection the server had just decided to close: it died in transit, the browser was answered 502, and the server never saw it and logged nothing. The server is now always the side that retires a pooled connection. The usage grid also refetches after a failed submission, so rows the server did seal before the connection dropped stop showing as open, and the error is surfaced rather than swallowed.
  • FixOpening a held draft invoice works. The invoice page assumed a number, dates and a payment status were always present, and a draft has none of them until it issues. Drafts now render with their issue state and hold reason, missing dates read as an em dash rather than a 1970 date, and the actions offered are the ones that apply — a link through to the subscription to record or waive the usage, instead of payment actions on a document nobody owes yet.
  • FixA manual meter awaiting entry is no longer filed as an integration fault. The seal sweep marked every unreported period "unverified" — which means a channel that was meant to report went quiet — including meters where the operator is the reporting channel and "not entered yet" is simply the truth. Those periods now stay "awaiting" and are reconsidered on each sweep, so a late entry or a change of policy resolves on its own. Nothing was billed differently, but the work appeared on the integration-fault queue and its View task link pointed at an empty one. Readings already marked this way have been restored.
  • FixThe usage history endpoint returns data instead of a 500. GET /api/v1/usage/:subscription/:meter/history failed on every populated response, reading an identifier field the records do not carry. The equivalent GraphQL query was unaffected.
  • FixA rejected API key reads as rejected. The public GraphQL API answered 500 "internal server error" for a revoked key, an expired rotation grace period, or a scope violation, so a permanently dead key looked like a transient fault and integrations retried it indefinitely. Those now return 401 or 403. Genuine internal errors are also masked properly in production, which one class of them had been bypassing.
  • FixA usage period cannot be counted twice into your revenue movement. The safeguard recording one usage movement per invoice was keyed in a way that also captured events with no invoice at all, so the second usage adjustment on a subscription that raised no invoice collided with the first — and a safeguard that fails to build is one that is not protecting anything, leaving the real constraint unenforced. It is now keyed only on real invoice references; adjustments without one no longer compete for the same slot.
v3.3
2026-08-06
  • NewMark invoices paid straight from your payment system. A new webhook records a payment against an invoice — addressed by its invoice number or its id — so a payment processor, a bank feed, or an automation can settle it the moment the money lands, without anyone opening Revvly. Send an amount to record a part payment, or leave it out to clear whatever is still outstanding. A part-paid invoice keeps track of what has been collected and what is still due, and stays Pending or Overdue — still in your receivables, still drawing reminders — until the balance reaches zero, at which point it settles to Paid exactly as marking it paid in Revvly does. Every payment is recorded under an idempotency key you supply, so a delivery that is retried is never counted twice, and each one stays on the invoice as a record of how it was collected. The webhook takes an API key and a signed request body, the same pair the usage-event webhook uses. One thing to know while it beds in: receivables totals still count an open invoice at its full amount, so a part-paid invoice reads high there — the invoice itself always shows the true outstanding balance.
  • NewRecord a part payment from the dashboard. Mark as paid now asks for an amount, defaulted to what is still outstanding — leave it and the invoice settles in full, or lower it to record a part payment. The invoice page shows Paid and Outstanding, a Payments card listing how each amount was collected (including payments that arrived via the webhook, marked "via API"), and a Balance due on the document view. The Finance ledger shows the amount still due beneath a part-paid invoice's total. A payment recorded by a person and one posted by a processor land in the same ledger under the same rules. The same caveat as the webhook applies: receivables totals still count an open invoice at its full amount.
  • NewSee every discount on a subscription from the client page. The subscription detail panel lists each discount instance — library or one-off — with its status, what it reduces, how many billing periods have been applied and how many remain, when it started, and an estimated value per period (omitted when the amount depends on usage). Cancelled and superseded discounts stay visible with their status, so you can answer "what is discounted, and for how long" without leaving for the pricing surface.
  • NewCreate CRM prospects through the public API. A new createProspect GraphQL mutation — gated by the WRITE capability on your API key — accepts an organisation, a contact, and a lead in one call, so a website form or an automation can drop a prospect straight into your pipeline. Supply an external reference to make retries idempotent. Integration prompts and a full guide are in the docs, and the dashboard surfaces copyable prompts on Clients, Prospects, API Keys, and Meters.
  • NewChoose what an API key can do. Issuing a key in Settings now asks for Read or Read and write, with the level shown alongside each key in the list. Read and write is required to create clients or prospects through the public API; rotating a key keeps its access level, and existing keys keep working exactly as before.
  • ImprovedThe Clients list puts active clients first. Clients are now grouped by activity — anyone with an active subscription, then everyone else — with the newest still at the top within each group, so a churned client no longer sits above one you're actively billing. A trial client sorts with the second group, where its recent creation date already keeps it near the top. Sorting, filtering, and loading more all follow the same order.
  • FixMRR and ARR no longer disagree on the same subscription. Both figures are now derived independently from the billed period cost — a monthly subscription reports its price as MRR, an annual one reports its price as ARR — instead of converting one into the other and re-rounding. A $100/quarter subscription used to show MRR $33.33 and ARR $399.96; it now shows ARR $400. The client page, the Clients list totals, the analytics dashboard, and historical snapshots all read the same pair.
  • FixFixed-duration discounts keep the renewals they are entitled to. Voiding a discounted invoice used to leave that cycle spent, so a customer lost a free or reduced period; the cycle is now released and the next renewal bills at the discounted rate again. On advance-invoiced subscriptions, a discount that targets a usage component now counts its renewals on the close-out invoice (where the usage actually bills) and expires when its duration runs out, instead of living on forever. Regenerating a close-out invoice no longer re-adds the base charge that the advance invoice already issued.
  • FixSigned webhook requests verify correctly. The invoice-payment and usage-event webhooks hash the original request bytes again, so a correctly signed delivery is accepted rather than rejected as a bad signature.
  • FixAuto-renewal runs for every workspace. The daily renewal job matched tenants against a flag no workspace could actually have, so no subscription's term rollover ever produced a renewal invoice — a silent gap in core billing. Renewal now runs for every active workspace; whether a given subscription renews is still controlled by its own auto-renew setting, and a deactivated workspace is still skipped. Any subscription whose term already ended catches up with a real invoice, one period per day, starting from the first run after this ships. Two related bugs are fixed alongside it: a subscription with an explicitly cleared renewal date could never come due, and a quarterly subscription renewed through the Renew action rolled into a zero-length term. A renewal invoice that fails to generate is now tracked and retried automatically instead of being lost while the subscription's dates had already moved on.
  • FixTenant logos render again. The link stored for an uploaded invoice logo expired within the hour, so anywhere that link was reused later — most visibly the tenant switcher — showed a broken image instead of the logo. A fresh link is now minted each time the logo is read, and the tenant switcher falls back to the workspace's first letter if an image ever fails to load, rather than an empty box.
  • FixBilling periods and usage now show the day they actually end on. A period is stored internally as running up to the moment the next one starts, so a few places — the backfill preview when adding a subscription, the "Usage this period" card, and the invoice summaries the in-product Assistant reads back to you — displayed the next period's opening day as part of the current one, e.g. "Jan 1 – Feb 1" for a January term. They now show the period's true last day ("Jan 1 – Jan 31"), matching the invoice PDF and invoice detail page, which already read this way. Invoice dates and amounts are unaffected — this is a display fix only.
v3.2
2026-07-31
  • NewPer-client prices for tiered and stairstep components. A price override on a single subscription now asks for the numbers the component's pricing model actually bills on — one rate per tier for volume and graduated tiered, one flat fee per step for stairstep, the committed and overage pair for committed overage, the fixed fee for commission — instead of a single rate per unit. A tiered component could previously only be given one number, which then stood in for its whole tier schedule, so a negotiated per-tier rate could not be expressed at all. A partly filled grid is now refused when you save rather than being quietly dropped, and the live preview on the create-subscription form prices from the full schedule. Editing only a component's included units or free allowance leaves its price untouched.
  • NewPin a client's next invoice number. A client migrated in with invoice history from elsewhere no longer restarts at one — set "Next invoice number" on their record, on create or on edit, and their next invoice picks up from there and counts on. The pin is used once and then cleared, so the field never claims a sequence that has already moved on. Invoice numbers now read as PREFIX-SEQUENCE — ACME-00042, say: a prefix and one running number per client that never resets, with no date segment. Invoices already issued keep the numbers they were given. The field is also available on the Assistant's create-client action and through the public API.
  • NewSee what sits behind each week on the cash-flow chart. Hovering the weekly chart snaps to the nearest week and opens a panel under that point with the week's range, its exact expected total (one figure per currency), how many invoices make it up, and the invoices themselves — each linking through to its invoice page. The chart is reachable by touch and keyboard as well as by mouse. This also restores weeks that went missing for workspaces billing in more than one currency: a week's totals across currencies are now summed rather than only the first being read.
  • NewForecasts and client value now follow a discount's schedule. A discount that runs for a set stretch — the first period only, or a fixed number of renewals — was treated as simply on or off, so the cash-flow forecast and a client's revenue figures kept promising money that was never going to arrive, and then never showed it coming back. Each projected renewal is now valued at whatever discount actually applies to that period: the forecast dips for the discounted renewals and returns to full the period after the last one expires. The client file's ARR and MRR, the MRR column and total on Clients, and the renewal table and timeline all read net, showing the list price alongside the discount rather than a split that no longer adds up. Applying, replacing, cancelling, or expiring a discount refreshes those figures straight away instead of leaving the previous ones up for as long as an hour — expiry being the case that mattered most, since the revenue is meant to come back. Receivables and AR aging are unchanged: an issued invoice already carried its discounted amount.
  • ImprovedContacts no longer need a full name and an email. Any one of first name, last name, or email is enough, so a first name taken off a call or an inbox address with no name can be recorded as it arrives instead of being blocked. A contact still cannot be anonymous — at least one of the three is required, and an edit that would clear the last one is refused. Contacts are shown by whatever they do have, and those without an email are left out of the places that need an address, such as the reminder composer.
  • ImprovedThe "Plan & pricing" step no longer looks blocked on a usage-based plan. A usage-based plan has no bundle, module, or base fee to configure, and the step said so in a warning panel that read like a validation error. It now reads as a hand-off, pointing you on to the "Usage components" step where the configuration actually happens.
  • ImprovedDisconnecting Google Drive now revokes its access. Disconnecting previously left the stored authorisation in place; it is now revoked as part of the disconnect. Existing connections were moved to a shared encrypted token store and keep working — there is nothing to reconnect.
  • FixOne per-client price override could take the whole analytics dashboard down. An override on a tiered or stairstep component was stored as a single rate that displaced the tier schedule it was meant to adjust, so every later read that priced that component failed — subscription creation, invoice generation, projected billing, and the MRR/ARR walk that visits every subscription, which is why a single row was enough to empty the dashboard. Overrides now carry the full schedule and are checked when saved, at every scope, so the state can no longer be reached. Overrides already in it have been set aside, so those subscriptions bill from their catalog price again; the rate that was recorded is kept visible rather than deleted, so it can be re-entered per tier. Pricing failures now name the component, the subscription, and which price won instead of reporting anonymously.
  • FixSigning in is more reliable on mobile, and failures now say what went wrong. Email addresses are trimmed before they are sent, so the trailing space phone keyboards and autofill often add no longer comes back as "invalid credentials". Sign-in responses are no longer cached by browsers or intermediaries, which could leave a device stuck on an answer from before it signed in. A network failure — offline, DNS, a blocked request — is now reported as one, distinct from a rejected password.
  • FixSubscriptions that bill purely in arrears are dated correctly. A subscription with no base charge, whose usage components all bill in arrears, was invoiced as though it billed up front: each backfilled invoice carried the start date of the period it was billing — a charge that cannot be known until that period has closed — and the period still running was given a zero-total invoice with no lines, which settled itself as paid and then sat at the top of the client's history ahead of every real invoice. Each invoice is now dated at the end of the period it bills; a period still in progress gets no invoice at all on an auto-renewing subscription, and is billed by its renewal once it closes. Payments recorded against backfilled invoices can no longer be dated before the invoice they settle. The preview on the create-subscription form shows the same dates you will get, and explains the cadence. Subscriptions with a base price, or with any component billed in advance, are unaffected.
  • FixA malformed Assistant tool definition can no longer take the Assistant down for everyone. Its tools are now checked when Revvly starts rather than on your first message, so a bad definition stops a deployment instead of failing every conversation. Unexpected failures part-way through an answer are also reported to our monitoring rather than ending quietly.
v3.1
2026-07-28
  • ImprovedZero-total invoices settle themselves. An invoice that comes to zero while it is still awaiting payment — a fully discounted renewal, a free trial, a usage period with no usage — is now issued as Paid, dated to the invoice date, instead of sitting in Pending and turning Overdue on its due date. Your receivables, AR aging, and cash-flow figures no longer carry amounts nobody owes, and no payment reminder goes out for them. Anything you stated deliberately is left as it is: a cancelled or failed invoice keeps that status even at zero, and credit notes (negative totals) are untouched. A zero-total invoice also stays editable — correct its lines to a real amount and it goes back to awaiting payment. Existing zero-total invoices still awaiting payment were settled the same way, at their own invoice date.
v3.0
2026-07-24
  • NewTasks — a task manager built into Revvly, available to every workspace. Create a task with a due date, priority, assignee, and a rich-text description, then work it from a list or a drag-and-drop board organised by status. Set reminders so nothing slips, and schedule recurring tasks through a composer that previews the upcoming dates before you commit.
  • NewTasks that follow your book of business. A task's due date can be anchored to a client event — a subscription's renewal or end date, or a lead moving through a pipeline — so it shifts automatically when that date changes instead of being pinned to a fixed calendar day. Every client record gains a Tasks tab showing the work open against that client, and each task keeps an activity log of what changed and when.
  • NewCRM — a new customer-relationship module your workspace can enable. It adds Prospects and Contacts surfaces, a Pipeline board that moves leads through your sales stages by drag-and-drop, and per-client Notes, a document store, a manual email log, and an Activity timeline. While the module is off, these surfaces show an "Available on CRM" prompt rather than disappearing, so you can see what they offer before turning it on.
  • ImprovedProspects stay out of your revenue numbers. A lifecycle stage now separates prospects from active clients, and the Clients list, its counts, and the revenue metrics (MRR / ARR) only ever count clients — so tracking a prospect in the CRM never inflates your reporting. Existing clients are unaffected; they are all treated as clients.
  • NewThe Assistant now understands Tasks and CRM. Ask it to create or find a task, log a note, add a prospect, or move a lead along the pipeline — each as a confirmation card you review and approve before anything is written, one change at a time. CRM actions are available when the CRM module is enabled.
  • ImprovedDocs — the documentation site now covers the CRM: a new "Run your sales pipeline" guide, four concept pages (Lead, Pipeline, Contact, Activity timeline), and the Client concept now documents its lifecycle stage, account owner, and source.
v2.5
2026-07-23
  • NewInstall Revvly as an app. The dashboard is now a Progressive Web App — install it from your browser onto your desktop or phone home screen and it opens in its own window, without the browser chrome. Repeat visits load faster because the app shell and previously loaded assets are cached locally. When a new version ships, Revvly prompts you to reload rather than swapping it out mid-task.
  • NewRead your data offline. Recently viewed clients, subscriptions, invoices, and metrics stay available when you lose connection — the dashboard renders from a local cache scoped to your workspace and user, so nothing leaks across accounts and the cache is cleared on logout or when you switch workspaces. An offline banner appears when you drop connection, and changes that would write data are held back until you are back online rather than failing silently.
  • NewPush notifications. Enable notifications per device under Settings → Notifications and Revvly can alert you to key account activity — a subscription renewed or churned, and an invoice paid or gone overdue — even when the dashboard is not open. Notifications are opt-in per device and can be turned off at any time.
  • ImprovedSmarter client matching on import. Imports now resolve each row to the right client through a single ordered set of signals — external ID, invoice prefix, Google Drive folder, email, exact name, then fuzzy name — instead of matching on name alone. A close-but-not-exact name no longer silently creates a duplicate; the client is created and flagged as a potential duplicate for you to confirm or merge, and each match shows the reason it was linked. Merging two clients now re-parents their history and transfers their identifiers so future imports match cleanly.
  • ImprovedCombined spreadsheet and Drive import. When you import from both a spreadsheet and Google Drive, Revvly now cross-checks the two sources before committing, corroborating clients and amounts across them so you review one reconciled result instead of two separate passes. Invoice imports also preserve their per-line breakdown rather than collapsing to a single total.
  • NewUndo an import. Completed import batches are now tracked and can be rolled back in one action, so a mistaken import can be reversed cleanly rather than undone by hand, row by row.
v2.4
2026-07-20
  • NewAdvance renewal invoicing — generate each renewal invoice ahead of its renewal date by a lead time you set per billing period (monthly, quarterly, yearly). Set a workspace-wide default under Settings → General and override it per client from the Edit Client modal (blank inherits the default, 0 keeps invoicing at renewal). Only the base recurring charge is billed early; the renewal itself then closes out just the variable/usage lines, so nothing is double-charged and usage counters are not reset ahead of time. A client with a next-renewal migration pending is skipped until the migration applies, so the current period is never billed at the pre-migration price.
  • NewRegenerate an invoice — a "Regenerate invoice" action on the invoice page (and on the Data tab) rebuilds a Pending or Overdue subscription/renewal invoice from the subscription's current pricing and the client's current payment terms, then re-renders the PDF. It re-pulls line items, amount, and discounts, and refreshes the due date and estimated payment date from the original issue date. Settled invoices (Paid, Failed, Cancelled) are never touched, and regenerating never resets a usage counter or consumes a discount's remaining renewals. The action is behind a confirmation because it is irreversible.
  • NewBackfill invoices for back-dated subscriptions — when you create a subscription with a start date in the past, the Add Subscription wizard now offers to generate an invoice for every billing term that has already elapsed. It previews each invoice with its historical issue date and lets you tick which were already paid and record when payment was received, so imported history lands with accurate receivables instead of an all-or-nothing default. Renewal then advances to today.
  • NewRe-anchor a subscription when its start date changes — editing the start date can now recompute the end date, next renewal date, and the whole invoice series to match, with a picker for how existing invoices are handled (rebuild all, preserve already-paid ones, or void and reissue). Moving a billing anchor does not change MRR, so no lifecycle events are emitted.
  • NewThe Assistant now shows what else you could add before you approve. When it proposes creating a client, subscription, bundle, module, meter, or variable component, the confirmation card lists the optional details still unset — a bundle's base price, a client's contacts, and so on — so you can ask for any of them up front instead of creating first and editing after.
  • NewTurn off automatic emails — a new Email Settings toggle under Settings → General stops scheduled sends such as payment reminders so you can send them manually instead. It defaults to on, so existing workspaces keep sending automatically until you change it.
  • ImprovedPayment details are now scoped by region and currency, not currency alone. A workspace operating in several regions can offer a region-appropriate bank account for the same currency; each generated invoice picks the account matching the recipient's region and the invoice currency, falling back to a region-agnostic account. Existing currency-only accounts keep working as region-agnostic defaults.
  • ImprovedList rows open in a new tab. Right-click, ⌘/Ctrl-click, or middle-click any row on the Subscriptions, Clients, Meters, Discounts, Outdated pins, and Catalog lists to open it in a new tab; a plain click still navigates in place.
  • ImprovedThe Renewals page is now a single calendar view. The separate Queue and Completed tabs — and their sidebar sub-items — have been removed in favor of one focused view of upcoming renewals.
  • ImprovedThe catalog sidebar section previously labeled "Markets" is now "Regions", matching the terminology used everywhere else in Revvly. Only the label changed; existing links and configuration are unaffected.
  • FixThe Add Subscription wizard could show a plan's base price in the client's currency and let you create the subscription even when the plan was priced only in another currency — the invoice would then bill zero. The wizard now prices strictly in the subscription's currency: a plan with no price in that currency reads "No pricing in <CUR>" and is disabled, so you add a price (or a custom base price) in the right currency first.
  • FixA base pricing rule saved as a global default with no billing period is now honored at subscription creation. Previously it required an exact period match, so a period-agnostic default was skipped and left the subscription and its first invoice at a zero base price.
  • FixRenaming a module tier now updates the price-matrix tabs immediately instead of only after saving, and branching a new draft version of a module keeps the previous version's per-tier prices instead of showing them as empty.
  • FixA transient error while resolving an invoice recipient's region no longer fails the whole PDF; generation continues and falls back to a region-agnostic bank account.
  • FixOpening Add Subscription from a client page could leave the region and available currencies blank when that client was not on the first page of the organizations list, which then priced the subscription incorrectly. The locked client is now fetched directly, so its region and supported currencies always populate regardless of list position.
  • FixCreating a second client without an invoice prefix could fail with "Another client already uses this invoice prefix" even when none was set. The underlying uniqueness constraints on invoice prefix and external reference have been rebuilt so blank values no longer collide, while real values stay unique per workspace.
  • FixCancelling or expiring a subscription through the general edit path saved the new status without recording the churn lifecycle event, so MRR and churn analytics could silently drift. Those transitions are now blocked on the plain edit path and must go through the dedicated cancel/expire actions; the edit drawer shows status as a read-only badge alongside plan and currency.
v2.3
2026-07-12
  • NewInvoice payment information — set tenant-wide banking details (account name, number, IBAN, SWIFT/BIC, routing number, branch code, bank address) per currency, plus free-form payment instructions, from Settings → Invoice → Payment Information. Generated invoice PDFs render a "Payment details" section automatically, picking the bank account that matches each invoice's currency.
  • ImprovedCreating a Variable Component is faster — it now takes its own name up front instead of borrowing one from a bound Meter, and no longer requires creating a Meter first. Leave the meter unset and Revvly provisions one automatically from the component's name; binding to an existing meter is still available as an advanced option for sharing usage-tracking identity across components.
  • FixThe Region column on the Clients list was rendering blank for every row. It now shows each client's assigned region.
v2.2
2026-07-08
  • NewRevvly Assistant — an AI assistant built into the dashboard. Ask it about your clients, subscriptions, invoices, and revenue in plain language and it answers from your live data with metric tiles, charts, and tables. It can also set things up for you — clients, bundles, modules, metrics, variable components, and subscriptions — always as a confirmation card you review and approve before anything is written, one change at a time. Everything it sees and does is scoped to your workspace. See the Assistant guide for what it can do and how to ask.
  • FixFixed an issue where a client's configured invoice prefix was not applied correctly to generated invoice numbers.
  • ImprovedVarious performance improvements across the dashboard — faster initial load and snappier navigation between pages.
v2.1
2026-07-04
  • NewFlexible discounting — reusable Discount Definitions (percentage or fixed, per-currency) applied as Discount Instances against a subscription's base price or a specific Variable Component. One-off discounts can be defined inline on a single subscription without touching the shared library. Duration is First invoice only / Fixed number of renewals / Forever; multiple active discounts on one subscription resolve via a configurable stacking mode (Combine, Best wins, First wins, Latest wins). Discounts apply after the normal pricing chain resolves, are previewable against the next invoice before saving, and are fully audited via Discount History.
  • NewPer-customer price override — override a subscription's base price directly, or write a subscription-scoped Variable Component rate, bypassing the catalog resolver entirely. Either takes effect prospectively at the next renewal or immediately with a prorated correction invoice for the current cycle. Unlike a discount, an override replaces the rate outright with no bounds — the discount log is the audited, reversible path if that's what you need instead.
  • NewClient-specific billing timing override (arrears vs. advance) — pin a Variable Component to bill at period start (Advance) or period end (Arrears) for one subscription, independent of the product default. Overrides are prospective only: a change never rewrites an invoice already scheduled or generated, it only changes how the next cycle bills. Requires a reason; full change history is kept separately for audit.
  • FixPayments-due-this-week (cash inflow planning) was filtering invoices by calendar Monday–Sunday due date instead of a rolling next-7-days window, and ignored each invoice's estimated payment date in favor of its due date. Both are now honored, giving Finance an accurate week-ahead cash inflow view.
  • FixMRR movement could undercount endingMRR for subscriptions started on the last calendar day of a month, since the month-end boundary was computed at 00:00:00 UTC rather than end-of-day.
v2.0
2026-06-14
  • NewBREAKING — v4 pricing split. VariableComponent documents now carry structural fields only (tier/step boundaries, model type, includedUnits, committedQuantity, proration, billing timing, measurement mode). Monetary values live in a sibling VariableComponentPrice collection scoped to GLOBAL_DEFAULT / MODULE / BUNDLE / SUBSCRIPTION. The pre-v4 fields VariableComponent.pricesByCurrency, currencyOverrides, catalogLinks, unitPrice/overageUnitPrice are gone; fixtures that still reference them will fail. ProrationModel was replaced by ProrationCalculation (FULL_MONTH | DAILY | NONE).
  • NewBREAKING — migrations replace upgrades. upgradeSubscriptionBundle / upgradeSubscriptionModule are removed; subscriptions now move via migrateSubscriptionModule / migrateSubscriptionBundle / migrateSubscriptionComponent. Each takes a required timing argument: MID_CYCLE_PRORATED applies now and issues an adjustment invoice; NEXT_RENEWAL queues a pendingMigration that the renewal cron applies cleanly. bulkMigrateSubscriptions handles many at once. cancelPendingMigration clears a queued migration before it applies.
  • NewBREAKING — createSubscriptionWithPricing is now the single subscription-creation path; the bare createSubscription mutation was removed. It captures the pins, freezes the base price, resolves the full breakdown, and locks the currency in one call.
  • NewBREAKING — subscriptionsWithOutdatedComponents renamed to subscriptionsWithOutdatedPins and returns [SubscriptionWithStalePins] with the per-pin diff (which entity drifted, by how many versions) so ops dashboards can render the gap directly.
  • NewScoped price authoring — every scope is written with its own mutation: setComponentDefaultPrice / removeComponentDefaultPrice (Global default), setModuleComponentPrice / removeModuleComponentPrice, setBundleComponentPrice / removeBundleComponentPrice, and addSubscriptionScopedPrice / removeSubscriptionScopedPrice. At billing time the resolver walks SUBSCRIPTION → BUNDLE → MODULE → GLOBAL_DEFAULT and picks the first matching currency.
  • NewPer-market and per-term pricing. setModuleComponentPrice / setBundleComponentPrice take an optional regionId, and the scope setters accept pricesByPeriod. Within a matched scope the resolver prefers a region-specific then region-agnostic price, and a per-period price over the period-agnostic one, before falling through to the next scope.
  • NewAttach components directly to a live subscription — attachVariableComponentToSubscription / detachVariableComponentFromSubscription add or remove off-catalog components (with optional subscription-scoped prices and per-attachment allowances). Components inherited from the pinned module/bundle cannot be detached.
  • NewPrice inspector queries — pricesForComponent (chain dump for the editor), publishGapCheck (publish-readiness matrix per region and currency), resolvePriceWalk ("why is this billed at $X?" — projects the full SUBSCRIPTION → BUNDLE → MODULE → GLOBAL_DEFAULT walk to the UI).
  • NewSubscription versionHistory — append-only pin-change log on every subscription. Records INITIAL_PIN, every migration, ADD_SUBSCRIPTION_PRICE / REMOVE_SUBSCRIPTION_PRICE, ADD_COMPONENT / REMOVE_COMPONENT, GRANDFATHER, CANCEL_PENDING_MIGRATION. Queryable via subscriptionVersionHistory.
  • NewRenewal calendar — renewalCalendar(startDate, endDate) returns events with total renewal value across the window; upcomingRenewals(days) is the lighter view for ops dashboards.
  • ImprovedCustom Pricing Agreement override axes consolidated to five: PRICE (any monetary or quantity field), MODEL, PRORATION, BILLING_TIMING, CURRENCY. The earlier fine-grained axes (UNIT_PRICE, TIERS, STEPS, …) collapse into PRICE.
  • ImprovedVariable Components carry an invoicePresentation block (showBreakdown, showQuantity, groupWith, taxCategory) controlling how their lines render on the invoice.
  • ImprovedGraphQL API reference rewritten against the live schema — Catalog (Modules & Bundles), Component Prices (all four scopes), Price inspector, Custom Pricing Agreements, Subscriptions, and Operations groups now match the actual surface. The removed upgrade* and bare createSubscription mutations are gone.
  • ImprovedVersioning guide rewritten with the migration timing semantics (MID_CYCLE_PRORATED vs NEXT_RENEWAL) and the new tracking surfaces (subscriptionsWithOutdatedPins, publishGapCheck, resolvePriceWalk).
v1.7
2026-05-11
  • NewVariable Component pricing — flat, volume tiered, graduated, stairstep, true overage, committed overage, commission, promotional. Each component is versioned; subscriptions pin a specific (componentId, componentVersion) at creation.
  • NewScope-based pricing — Variable Component Prices target Global default, Module, Bundle, or Subscription scope. At billing time Revvly walks the scopes most-specific first and picks the first matching currency.
  • NewCustom Pricing Agreements — per-customer, per-component overrides. Draft → Published → effective at the next renewal. Beats every scope, fully audited via the lifecycle event log.
  • NewVersion pinning and grandfathering — Modules / Bundles / Components are immutable once Published; subscriptions pin a specific version at creation and only move via an explicit operator action.
  • ImprovedDocs site — four new guides (Pricing models, Scope-based pricing, Custom Pricing Agreements, Versioning) and a condensed GraphQL API reference. The entity catalog has been rewritten around Variable Components; Pricing Rules are documented as a legacy entity.
v1.6
2026-05-05
  • NewFinance — currency view toggle. Invoices & Billing stats now default to your reporting currency with FX conversion applied. Switch to "By currency" to see each currency's receivables, pending, overdue, and this-week amounts in their own section.
  • FixSubscriptions page — Total Revenue now converts each subscription's base price to the reporting currency before summing. Previously, a QAR 50,000 subscription was counted as $50,000 USD.
  • FixFinance forecast entries were always labeled USD regardless of the actual invoice currency.
  • FixPending payments in Finance no longer goes negative when open invoices span multiple currencies.
  • FixCalendar date picker — today's date was invisible in dark mode.
v1.5
2026-05-02
  • ImprovedCurrency selector — consistent multi-currency picker across Regions, Pricing, Subscriptions, Onboarding, and Import.
  • ImprovedDashboard tooltips and chart configurations updated for clearer revenue metric display.
v1.4
2026-04-18
  • NewLifecycle Events export — stream the full event log to your data warehouse.
  • ImprovedPricing Rules now support customer-specific overrides for enterprise deals.
  • FixProrated amounts on mid-cycle downgrades were off by one day — resolved.
v1.3
2026-03-11
  • NewVariable Limits on Pricing Rules — charge for overages on seats, storage, calls.
  • ImprovedFaster analytics rebuild: MRR recalculations now complete in under a minute.
v1.2
2026-02-02
  • NewMulti-currency reporting — daily Fixer rates auto-sync per workspace.
  • ImprovedModule tiers got a UI refresh with drag-to-reorder Feature Flags.
v1.1
2025-12-15
  • NewGoogle Drive invoice import, alongside the existing Excel import.
  • FixGrace period end dates were sometimes written a day early — resolved.
v1.0
2025-11-01
  • NewRevvly is out of private beta. Welcome.