Studies & referenceStudies & reference

Business Hours Audit Checklist: Which Time Slots Go Uncovered and How to Detect Them in the Logs

9 min read

What this audit measures (and what it doesn't)

A business hours audit doesn't measure whether the hours you published look nice or are well written. It measures one single thing: how many messages come in during time slots where no one is assigned to answer them, and how long the first human response takes in those slots. The result is a coverage number per time slot, not an opinion.

Before you start, two method warnings. First: the audit is done on the timestamp that Meta sends, not on the date the row was inserted into your database. Second: if your operation imported history from a migration, any analysis done with the insertion date will show that almost everything happens on the same day and at the same time. That's not your operation, it's the import artifact. The column that counts is the message timestamp.

If your inbox provider doesn't expose Meta's timestamp and only shows you the upload date, ask for it before auditing. Without that column, the time slot analysis is useless.

Step 0: define the unit of analysis before touching the data

Most business hours audits fail because they mix three different things in the same table: incoming messages, conversations, and responses. They are three units and they give three different numbers. Define which one you're going to use and don't change it halfway through the analysis. In a pizza place with delivery, for example, a customer who sends "hi", then the order, then the address, and then the transfer receipt generates four incoming messages, but only one conversation and one first response: if you count messages, the midday slot looks twice as busy as it really is.

UnitWhat it countsWhat it's forWatch out for
Incoming messageEvery message that arrives from the customerMeasure volume and peaks per time slotA customer who writes 6 times inflates the time slot
ConversationWindow of messages grouped by customer and timeMeasure real workload per time slotThe grouping criteria changes the number
First responseThe first outgoing message after the incoming oneMeasure delay and effective coverageAutomated responses count as a response if you don't separate them

Pick one main unit and use the other two as a control. If all three numbers tell the same story, the finding is solid.

Step 1: build the time-slot grid and cross-check it against the published schedule

Don't audit "morning" and "afternoon". Divide the day into one-hour slots and mark each one with three possible states: covered (someone is assigned and active), uncovered (no one assigned) and gray (someone is assigned but there's no certainty they're watching the inbox). The gray slot causes the most problems because it doesn't appear in any document and it does appear in complaints.

  • Covered slot: there is at least one agent with the inbox open and a defined response policy.
  • Uncovered slot: no one is assigned. The message comes in and waits until the next covered slot.
  • Gray slot: someone is assigned on paper, but there's no confirmation of real activity (meetings, commutes, off-screen tasks).
  • Boundary slot: the 30 minutes before and after a shift change. That's where handoffs get lost.
  • Special slot: holidays, vacations and days with reduced staffing. They're audited separately because the message pattern also changes.

With the grid built, overlay the schedule you published on the WhatsApp Business profile, on the website and on social media. If the three don't match, you already have a finding before looking at a single log: the customer can't know when they'll get a response. A typical beauty salon case: the profile says they're open Tuesday to Saturday from 10:00 to 20:00, the website says "Monday to Friday from 9:00 to 19:00" and the logs show that on Tuesdays at 10:00 there's no one because the schedule starts at 11:00. Three versions of the same schedule and none of them true.

Step 2: read the logs with the correct timestamp

This is the step where most people get it wrong and draw false conclusions. In an inbox database there are two dates: the message timestamp (the one Meta sends, when the customer actually wrote) and the row insertion date (when your system saved it). If your operation migrated history, the insertion date is concentrated on the day of the import and destroys any schedule analysis.

ColumnWhat it representsUseful for auditing schedulesWhat happens if you use it anyway
timestamp (Meta)When the customer sent the messageYes, it's the only valid one—
created_at (insertion)When your system saved the rowNoWith migrated history, almost everything falls on the same day and the same time; the business curve disappears
first response dateWhen the team's first message went outYes, to measure delayIf the response is automatic, it measures the automation, not the service
assignment dateWhen an agent took the conversationYes, to measure the real queueIf the team doesn't use assignment, the column is empty and useless

A normal business curve has a recognizable shape: it rises mid-morning, peaks at midday, drops during the siesta, rises again in the afternoon and falls at night. If your chart doesn't look like that, check the column before drawing conclusions about the schedule. In a clothing store, the real peak is usually between 12:00 and 14:00 (size and stock inquiries during lunch) and another between 19:00 and 21:00 (inquiries from the phone after work). If your curve shows a single peak at 03:00 on a Tuesday, you're not reading Meta's timestamp: you're reading the import.

Rule of thumb: if the hourly distribution of your messages shows a giant spike on a single day of the week and at a round hour, you are probably reading created_at and not the Meta timestamp.

Step 3: calculate coverage per time slot (the formula)

Coverage is not "we have people from 9 to 18". It is a percentage per time slot. It is calculated like this:

  • For each time slot, count the incoming messages in a representative period (at least two full weeks, ideally a month).
  • Count how many of those messages received a first human reply within the time slot.
  • Divide replies within the time slot by incoming messages in that time slot. That is the coverage percentage.
  • Repeat the calculation separating business days, Saturdays and Sundays. Mixing them hides the gaps.
  • Mark in red every time slot with coverage below the threshold you define as acceptable for your operation.

The threshold is not universal. A business that sells an emergency service and one that sells custom furniture cannot use the same number. The important thing is to set it before looking at the results, not after, so as not to fit the criteria to the data.

Time slotIncoming messagesAnswered within slotCoverageStatus
08:00–09:00———Before opening: check if there are overnight messages without a reply
09:00–12:00———Core time slot: coverage here should be the highest
12:00–14:00———Peak of inquiries and team lunch: classic gap
14:00–17:00———Core afternoon time slot
17:00–19:00———Closing: here accumulates what was not answered before
19:00–08:00———Outside business hours: measured separately, no immediate reply required

Fill in the cells with your own numbers. The empty table is the deliverable: what is audited is the procedure, not someone else's benchmark.

Step 4: detect the four signs of uncovered time slots

Not all uncovered time slots look the same. These are the four signals that appear in the logs and what each one means.

Signal in the logsWhat is happeningHow to confirm it
Incoming messages with first response after 12 hours or moreThe message fell into an uncovered time slot and waited for openingCross-check it with the incoming time: if it falls outside the covered grid, it's a gap, not a delay
Spike in incoming messages in the last hour of the covered time slotThe team is closing and a queue is left unresolvedCompare the volume of the last hour against the first hour of the next day
Unassigned conversations accumulated at the start of the dayThe close left no handoverCount the conversations open before the first response of the day
Automated out-of-hours responses with no human follow-up at openingThe message was answered automatically, but nobody picked it back upLook for conversations where the only outgoing response is the automated one

A borderline case worth looking at separately: messages that arrive five minutes before the time slot closes. They are often answered the next day and don't show up as a problem because technically they came in during business hours. For the customer, they came in during business hours and got no response. That borderline slot audits itself.

Each signal points to a different cause: the first is about the grid, the second about capacity, the third about the closing process, and the fourth about the handover between automation and a person.

Step 5: contrast the published schedule with the real schedule

This step closes the audit and is the one that most quickly produces a concrete fix. Compare three things: what the WhatsApp Business profile says, what your website says, and what the logs show. Any difference between the three is a publishable finding.

  • If the profile says they're open until 20:00 and the logs show that after 18:00 no response goes out, the published schedule is inflated.
  • If the website says 24 hours and the profile says 9 to 18, there are two different messages and the customer chooses the one that suits them.
  • If holidays are not declared anywhere, each holiday is handled differently and the team improvises.
  • If the schedule-based auto-reply doesn't match the real grid, the customer receives a message that promises something that won't happen.

The audit isn't looking for the schedule to be longer. It's looking for the published schedule to be true. A business that is open from 9 to 17 and says so precisely generates less frustration than one that says 24 hours and responds when it can. In real estate, for example, most inquiries about a property come in outside office hours, when the person is looking at the listings from home. If the sign says "open from 9 to 18" and nobody checks the inbox after 18:00, the interested party has already written to three other real estate agencies before they open.

What to do when an uncovered time slot appears

Finding the gap is half the work. The other half is deciding what to do with it. There are four possible answers and each one has a different cost.

OptionWhen it's worthwhileWhat it involvesWhat it does NOT solve
Cover the time slot with a personWhen the volume of the time slot justifies the costAdd staff or shift schedulesIt doesn't work if the volume is low: you pay to cover emptiness
Move the published scheduleWhen the uncovered time slot has low volumeChange the profile and the website so they match realityIt doesn't solve the time slot if high volume still comes in
Automate the first responseWhen the customer needs to know they were receivedSet up a response by schedule that clarifies when the human response will arriveIt doesn't replace the human response: it only lets them know it will arrive
Group and respond at openingWhen the volume is low and the customer tolerates waitingDefine a response policy for the start of the next dayIt doesn't work for urgent inquiries or for time-sensitive industries

A practical criterion: if the uncovered time slot accounts for less than 5% of daily volume and there are no urgent inquiries, it's probably not worth covering it with a person. If it accounts for more than 15% or includes the peak of the day, it's a staffing problem, not a configuration problem. In food service, the 12:00 to 14:00 slot usually accounts for more than 20% of the day's messages (orders and reservations), so a gap there isn't covered with an auto-reply: it's covered with an assigned person. On the other hand, the 23:00 to 08:00 slot in a furniture store usually stays below 5% and is well handled with an auto-reply that clarifies that the response will arrive in the morning.

There is no universal correct option. The decision depends on the volume of the time slot and the customer's tolerance for waiting.

Common mistakes when auditing the schedule

  • Using the insertion date instead of the message timestamp. The result is a false curve with a giant peak on a single day.
  • Auditing a single day. Any given Tuesday doesn't represent the week. At least two full weeks.
  • Mixing weekdays with weekends. The message pattern changes and the average hides both.
  • Counting automatic replies as human replies. It inflates coverage and hides the real gap.
  • Ignoring the shift-change boundary slot. That's where handoffs get lost and it doesn't show up in any report.
  • Auditing the schedule without auditing holidays. Holidays have their own pattern and their own staffing.
  • Defining the coverage threshold after seeing the data. It's the fastest way to find nothing.

How to know the audit was done right

A schedule audit is done well when you can answer these questions with a number, not with an impression: which is the time slot with the lowest coverage, how many messages came in during that slot in the audited period, how long did the average customer wait in that slot, and what decision did you make about it. If any of the four answers is "more or less", a step is missing.

The final deliverable is not a long report. It is a grid of time slots with a status per slot, a list of gaps ordered by volume, and a decision per gap. That is what can be reviewed the following month to see whether coverage improved.

Frequently asked questions

How many days of messages do I need to audit business hours?+

At least two full weeks, ideally one month. A single day does not represent the week and a weekly average hides the peaks of each time slot. If your operation has marked seasonality, audit a period that includes it.

Why can't I use the row insertion date to analyze business hours?+

Because the insertion date indicates when your system saved the message, not when the customer wrote it. If there was a history import, almost all rows end up with the same date and time, and the real message curve disappears. The valid column is the timestamp that Meta sends.

What is a gray time slot and why does it matter?+

It is a time slot where someone is assigned on paper but there is no confirmation that they are watching the inbox. It does not appear as uncovered in any document, but it does appear in complaints from customers who wrote and got no reply. It is detected by cross-referencing assignment with the actual first response.

Do automated replies count as coverage?+

Not for measuring human attention. An automated reply by business hours notifies that the message was received, but it does not resolve the inquiry. If you count it as coverage, the percentage goes up and the real gap gets hidden. Measure them separately: one column for automated replies and another for human replies.

What do I do if the uncovered time slot has low volume but urgent inquiries?+

Separate by type of inquiry, not just by volume. A time slot with low traffic but with inquiries that cannot tolerate waiting needs a different policy: it could be an automated reply that routes to an urgent channel or an on-call person, even if the volume alone does not justify it.

Answer WhatsApp with AI

Try Wando free. No credit card required.