Weekly, quarterly, semiannual: why most expense apps only understand monthly
7 min read
Jose Pedro Franco MorenoBuilds Kelo, on his own, from Spain.
A billing cycle is two pieces of information: a unit (weeks, months or years) and how many of them pass between charges. Apps that offer only monthly and yearly force you to divide, and dividing throws away the charge date, which was half of what you wanted to know.
Car insurance bills every six months. The water bill comes quarterly. Your gym charges every four weeks, not monthly. And the app where you track your spending gives you two choices: monthly or yearly.
So you do what everyone does. You divide. You enter the insurance as $58 a month and move on.
From there the math is wrong, and it stays hidden until the month of the charge.
What dividing breaks
Splitting a semiannual bill six ways gives you the right average. Your checking account doesn’t run on averages: it never sees $58 six times, it sees $350 on a Tuesday in March and nothing for five months.
That means three things:
- The month of the charge is wrong. March doesn’t cost what the app says. It costs $292 more.
- The other five months are wrong too, in the other direction. It looks like you have money spare when it’s already spoken for.
- There’s no reminder. An app that thinks you pay $58 every month has no particular day to warn you about, because as far as it knows, no day is special.
The reminder was the reason you tracked it.
How many payments a year each cycle has
This table settles half the arguments. Keep it.
| Cycle | How often | Payments a year |
|---|---|---|
| Weekly | 7 days | 52 |
| Biweekly | 14 days | 26 |
| Semimonthly | Two fixed dates | 24 |
| Monthly | 1 month | 12 |
| Bimonthly | 2 months | 6 |
| Quarterly | 3 months | 4 |
| Every four months | 4 months | 3 |
| Semiannual | 6 months | 2 |
| Annual | 12 months | 1 |
Watch the two that sound alike. Biweekly is every fourteen days, 26 a year. Semimonthly is twice a month, 24 a year. And bimonthly gets used for both in the wild, which is why you should check the amount and the date rather than trust the word.
The case almost nobody models correctly: every two weeks
Every two weeks is not twice a month.
- Twice a month is 24 payments a year.
- Every fourteen days is 26 payments a year.
That’s two extra payments. And they don’t spread out evenly: there are two months a year where three charges land instead of two. If something bills you every fourteen days and you track it as “twice a month,” two months of every year will be wrong, and you’ll never work out why.
It’s the same calendar that gives you three-paycheck months twice a year on a biweekly pay schedule.
And a week is not a quarter of a month
Smaller, and it slips into every budget.
A month doesn’t have four weeks. It has 4.348, which comes from dividing 365.25 days by 12 months and then by 7.
That sounds like nitpicking until you multiply it. A $10 weekly expense budgeted as “four a month” is $480 a year. What you actually pay is $521.80. Forty dollars of difference from rounding a week.
There’s a worse version of the same mistake: dividing yearly by 365 and monthly by 30. Those are two different answers to the same question, so the app gives you one number or another depending which screen you came from. If two screens of your app disagree about the same expense, this is usually why.
The 31st bug, and you can test for it in thirty seconds
This is the good one, and it’s in more apps than you’d think.
Many of them work out the next charge by adding one month to the previous date. Sounds reasonable. It breaks in February:
- You pay on January 31.
- The app adds a month. February has no 31st, so it clamps to the 28th.
- Next month it adds a month to the 28th, giving March 28.
- And from there, the 28th is your date. Permanently.
Someone who pays on the 31st ends up seeing the 28th in the app and the 31st on their statement, for the rest of the year, because of one February eight months ago.
The correct approach counts from the original day every time and clamps only in months that are too short: January 31, February 28, and March 31 again.
How to test it: add a monthly expense dated January 31 and look at what it says for March. If it says March 28, your app has the bug. If it says March 31, it’s built right.
Even Apple uses a list, and that tells you something
App Store subscriptions allow six durations only: one week, one month, two months, three months, six months, and one year. It’s in Apple’s subscription documentation.
Two useful conclusions come out of that:
- If something bills you every four months, it can’t be an App Store subscription. It’s a card charge or a direct debit, which means it will never show up in the subscriptions list in your iPhone settings.
- Even with a list of six, Apple covers more rhythms than most expense apps, which stop at two.
What the model should look like
A billing cycle isn’t a list of options. It’s two pieces of information:
- A unit: weeks, months, or years.
- How many of them pass between one charge and the next.
Everything falls out of that. Monthly is every 1 month. Quarterly is every 3. Semiannual is every 6. Every two weeks is every 2 weeks. And the odd storage unit that bills every four months fits too, without inventing a category for it.
A list has a fixed number of cases. The moment something bills you on a rhythm that isn’t on it, you have to record it wrong.
There’s a subtlety worth understanding, and it’s why there are three units instead of one: weeks and months don’t behave the same way. A cycle counted in weeks is anchored to a fixed number of days, so it drifts across the calendar. A cycle counted in months is anchored to a date, so it lands on the same day every time. That’s why “every 2 weeks” and “twice a month” aren’t the same thing even though they look like it, and why an app that treats them as one will be wrong twice a year.
How to test your app in thirty seconds
Open whatever you track expenses in and try to add something that bills every three months.
- If you can pick the unit and the number, it’s built right.
- If it gives you a list and “quarterly” is on it, you’re fine for the common cases. Now try every four months and see where that goes.
- If it only offers monthly and yearly, you now know why your months never add up.
Then run the January 31 test above, which is the one that separates an app that is built right from one that looks like it.
Do both before you enter more data. With two hundred expenses already in there, switching apps is a job of its own.
What Kelo does about it
Kelo uses the two-piece model: you pick the unit (weeks, months, or years) and how many go between charges, up to twenty-four. That covers quarterly, semiannual, every two months, every two weeks, and every four months, with no dividing and no workarounds.
It passes the January 31 test: the date is worked out from the original anchor and clamped only in months that are too short, so one February doesn’t move your date forever. And to convert an expense to its monthly equivalent it uses 4.348 weeks, not 4, through a single shared calculation that the summary, the budget, the charts and the widget all go through. That’s what stops two screens from disagreeing.
And because it knows the date of every charge, it tells you what this month actually costs, not what it averages, and warns you before the charge lands.
Two things worth knowing: Kelo doesn’t connect to your bank or ask for your login, so you enter your expenses once yourself. And it doesn’t cancel anything for you. It tells you what you’re paying and when, but cancelling a service happens where you signed up.
It’s iPhone only, and it’s free to start.
Loose ends
How many payments a year is a biweekly charge?
Every fourteen days is 26 payments a year. Twice a month (semimonthly) is 24. They are not the same, and the gap is two months a year where three charges land instead of two.
What is the difference between biweekly and semimonthly?
Biweekly means every fourteen days, so 26 payments a year on a date that drifts across the calendar. Semimonthly means twice a month on two fixed dates, so 24 payments a year. Biweekly is the one that produces three-charge months.
Why did my app move the charge date from the 31st to the 28th on its own?
Because it adds one month to the previous date instead of counting from the original day. In February it clamps the 31st to the 28th, and from then on the 28th becomes the new reference date permanently. A correct implementation clamps only in months that are too short and returns to the 31st as soon as it can.
How many weeks are in a month for budgeting?
4.348, not 4. It comes from dividing 365.25 days by 12 months and then by 7. Budgeting a weekly expense as four a month falls short by almost 9 percent: it is 52.18 charges a year, not 48.