← Blog

Engineering · 4 min read

Semi-monthly bills: the pay schedule most budgeting apps forget

If your paycheck lands on the 15th and the last day of the month, you've probably had this conversation with a budgeting app: it offers weekly, biweekly, monthly — and nothing that matches your life. Payroll departments love the semi-monthly schedule because it makes months tidy. Most recurrence engines ignore it because it makes math untidy: "the last day of the month" isn't a fixed interval, and pretending it is breaks quietly, a day or two at a time.

This post is about that gap — what semi-monthly actually is, why the common workarounds drift, what the end of February reveals about a recurrence engine, and how ClariFi models the schedule as a first-class citizen instead of an approximation.

24 ≠ 26: the two schedules people conflate

Semi-monthly means twice a month on fixed dates — most commonly the 15th and the last day. Twelve months, two events each: 24 a year.

Biweekly means every other week on a fixed weekday — every other Friday, say. Fifty-two weeks, half of them paydays: 26 a year.

Events a year24 vs 26semi-monthly vs biweekly — conflate them and every “monthly” total wobbles

Two extra paychecks sounds like trivia until you budget with it. A biweekly earner gets two months a year with three paychecks in them; a semi-monthly earner never does. The check sizes differ too: the same salary divides into 24 larger checks or 26 smaller ones. Conflate the schedules and every "monthly" total in your budget wobbles — some months look flush, others look broke, and neither is telling the truth.

Where "every 15 days" falls apart

Apps without a semi-monthly type push you toward a hack: set the bill or paycheck to repeat every 15 days. It looks right for exactly one hop. Start on July 15, 2026 and watch it go:

the real schedule     "every 15 days"
Jul 15, 2026          Jul 15, 2026      ✓
Jul 31                Jul 30            1 day early
Aug 15                Aug 14            still drifting
Aug 31                Aug 29            2 days off, 3 hops in

The drift never self-corrects, because two 15-day hops make 30 days and months keep refusing to be 30 days long. Keep the sequence running and by December the hack is paying on the 12th and the 27th — three and four days adrift and still wandering. "Every 14 days" is no rescue; that's just biweekly, the other schedule, with its own two-checks-versus-three rhythm. There is no fixed interval that produces "the 15th and the last day," because the target dates aren't a fixed interval apart. Semi-monthly is a rule about the calendar, and only a rule can follow it.

Three hops in, the hack is two days adrift — and it never comes back.

The end-of-month rule and February

"The last day of the month" is a rule, not a date. It's the 31st in January, the 30th in April, the 28th in February — and the 29th when a leap year comes around. A recurrence engine has to ask the calendar how long each month actually is, every time, or it will be wrong four-plus months a year.

ClariFi's semi-monthly rule reads like the payroll policy it models: if today is before the 15th, the next event is the 15th of this month; if today is before the month's last day, the next event is that last day; otherwise it's the 15th of next month. The last day is computed per-month from the calendar itself, so February needs no special case — the same rule that lands on January 31 lands on February 28, and on February 29 when the year asks for it.

The sibling rule matters too: in ClariFi, a monthly bill anchored to the 31st keeps its day-of-month and clamps to shorter months — January 31 → February 28 → March 31 → April 30 — instead of erroring out or silently sliding to March 3. Calendars are full of these edges, and the test of a recurrence engine is whether it handles them or hands them to you.

A bill anchored to the 31st keeps its day and clamps to shorter months — never sliding to March 3.

Budget on two paychecks, not one month

Once the schedule is modeled honestly, a genuinely useful habit opens up: assign bills to checks, not to months. The last-day check arrives right before the 1st — rent lives there, along with anything else due at the top of the month. The 15th check picks up the mid-month cluster: utilities, insurance, subscriptions. The month stops being one big pool you hope lasts and becomes two smaller pools with explicit jobs, and "can I afford this?" gets an answer that's checkable on the 16th, not just on the 1st.

This is where drift stops being a cosmetic bug. If the app thinks your paycheck arrives on August 14 when it actually arrives on the 15th, every balance forecast around that seam is wrong by a paycheck — the worst possible place to be wrong.

How ClariFi models it

ClariFi's recurrence engine has four first-class cadences: daily, weekly, monthly, and semi-monthly. The first three take a multiplier — every 2 weeks covers biweekly paychecks, every 3 months covers a quarterly bill. Semi-monthly is deliberately different: it ignores multipliers entirely and lands on exactly two days, the 15th and the last day of each month. Twenty-four events a year, no drift, no February special-casing — whether the month has 28, 29, 30, or 31 days.

Those events flow straight into the Flex budget, so a semi-monthly paycheck shows up in your plan on the day it actually arrives, and a semi-monthly bill is waiting in the right half of the month. If you're paid on the 15th and the last day, this app was built with your calendar in mind — early access is open.

There's no calculator for this one — the calendar is the calculator. But if you want to see where those two paychecks should go, the 50/30/20 Calculator and the Flex Budget Calculator split any income into buckets that survive real life. Tools, not advice.

In the app

ClariFi runs this math on your real accounts.

Connect your bank once and the numbers on this page compute themselves — live, private, every day. Free in TestFlight early access.

Get early access

iPhone only for now, iOS 17+. Tools, not advice.