Skip to content

WhatsApp message volume by day and number in Google Sheets

Count WhatsApp messages in and out per day and per number in Google Sheets with a QUERY formula, from a message log filled by webhooks.

Written by
By WavesFlo team
Published
Published
Reading time
2 min read

A daily volume table answers whether the week was busy and which number carried it. With one row per message in a log, a helper column for the day and one QUERY formula produce it, and a pivot by number splits it further. It is a count of events, not of people: one customer writing ten times is ten.

The Messages tab these formulas assume
ColumnHoldsComes from
A Event IDA value that identifies the eventThe event's identifier, which stays the same on every retry
B TimeA real date-time, not textThe event's own timestamp, converted to your timezone
C ChatOne value per conversationThe chat id the event carries; for a direct chat, the customer
D Directionin or outin for message.received, out for message.sent, set in the workflow
E NumberWhich of your numbersThe id of the connected number the message arrived on or left from
F Typetext, image, voice note and so onThe message type the event carries

How do you add the day?

Add column G, Day: =ARRAYFORMULA(IF(B2:B="","",INT(B2:B))). Format the column as a date.

How do you build the daily table?

=QUERY(Messages!A:G,"select G, count(A) where G is not null group by G order by G desc label G 'Day', count(A) 'Messages'",1)
Messages in and out per day

To split by direction, use pivot D at the end of the query: group by G pivot D. To split by number, group by G, E instead.

Variations of the same query
You wantChange the query to
Inbound onlyadd: where D = 'in'
One numberadd: and E = 'YOUR_NUMBER_ID'
Per weekput =INT(B2)-WEEKDAY(B2,2)+1 in the helper column
Last 7 daysadd: and G >= date '2026-10-26' using a cell reference built with TEXT(TODAY()-7,"yyyy-mm-dd")

How do you show names instead of number ids?

The event carries the id of your connected number, not a friendly name. Keep a Numbers tab with the id, the phone number and the team, and add =VLOOKUP(E2,Numbers!A:C,3,FALSE) in a helper column.

What counts as a message?

  • Every event the workflow writes: texts, photos, voice notes and documents each count once.
  • Group messages count if you log them. Filter them out if the table is for customer chats.
  • A retried delivery is one event with one identifier, so match on it when writing rows.

For campaigns, use the campaign results in WavesFlo, counted from delivery receipts.

Because each event names the number it moved on, the same table splits cleanly by store or branch once every number links into one workspace. Campaign results and reports are covered on the features page.

Questions

How do I count WhatsApp messages per day in Google Sheets?

Add a Day column with INT of the timestamp, then use a QUERY that groups by day and counts the event identifiers.

Can I split by number?

Yes. The event carries the id of the connected number; group by it, and map ids to names on a Numbers tab.

Does it count unique customers?

No, it counts messages. Count unique customers with COUNTA(UNIQUE(...)) over the chat column.

Keep reading

See it on your own numbers.