Skip to main content
Meta Ads

Meta Ads cost per lead by hour ranged $40 to $101, on the 4.6% of spend the hourly breakdown covers

The caveat comes first, because the headline depends on it. We asked the Meta Marketing API for the hourly breakdown (hourly_stats_aggregated_by_advertiser_time_zone) on all 23 accounts. Four returned it. Those four accounts cover $35,688 of the $783,518 pooled lifetime AUD spend in this series, which is 4.6%. Every number in this post comes from that 4.6%, and we treat any hour with fewer than 20 leads as below the floor for a cost-per-lead comparison. The other 19 accounts returned no rows, and we did not chase the reason account by account.

With that said. Across those four accounts, cost per lead by hour of day (advertiser time zone) ran from $40 at 23:00 to $101 at 04:00. The $101 rests on four leads and is not a finding, it is noise. Among the 18 hours that cleared 20 leads, the cheapest hour was still 23:00 at $40 on 28 leads, and the dearest was 08:00 at $87 on 21. That is a 2.2x spread between the best and worst hour on a like-for-like footing, in a set where click-through rate barely moved all day (1.5% to 1.9%).

Meta does not let you bid by hour. Whether the spread is worth acting on, and what the lever actually is, takes the rest of this post.

Twenty-four hours, four accounts

Hour

Spend

CTR

CPC

Leads

CPL

00:00

$1,120

1.7%

$1.36

20

$56

01:00

$655

1.6%

$1.49

18

$36

02:00

$452

1.9%

$1.23

10

$45

03:00

$358

1.7%

$1.36

6

$60

04:00

$403

1.8%

$1.35

4

$101

05:00

$617

1.6%

$1.37

10

$62

06:00

$1,086

1.6%

$1.50

22

$49

07:00

$1,591

1.5%

$1.63

16

$99

08:00

$1,821

1.5%

$1.53

21

$87

09:00

$1,822

1.6%

$1.41

31

$59

10:00

$1,717

1.6%

$1.45

32

$54

11:00

$1,631

1.6%

$1.40

31

$53

12:00

$1,663

1.5%

$1.37

23

$72

13:00

$1,701

1.6%

$1.25

31

$55

14:00

$1,772

1.6%

$1.26

35

$51

15:00

$1,767

1.6%

$1.18

35

$50

16:00

$1,882

1.6%

$1.21

36

$52

17:00

$1,970

1.5%

$1.30

34

$58

18:00

$2,057

1.5%

$1.26

41

$50

19:00

$2,159

1.6%

$1.23

40

$54

20:00

$2,248

1.6%

$1.18

40

$56

21:00

$2,229

1.7%

$1.12

46

$48

22:00

$1,845

1.7%

$1.14

31

$60

23:00

$1,119

1.7%

$1.19

28

$40

Each row is the hour in which the impression was served, in the ad account's time zone, with spend, clicks and leads attributed back to that hour. The lead counts sum to 641, so the blended cost per lead across the whole slice is about $56.

Read the spend column first. Meta's own pacing put the money where people are on their phones: the three heaviest hours are 20:00 ($2,248), 21:00 ($2,229) and 19:00 ($2,159), and the lightest is 03:00 ($358). Nobody scheduled this. It is what lowest-cost delivery does when the auction is cheaper and the audience larger in the evening.

Read CTR next. It sits between 1.5% and 1.9% for all 24 hours. The hour of day does not change whether people click. CPC moves more, from $1.12 at 21:00 to $1.63 at 07:00, which is a 1.46x spread. Cost per lead moves more again. So most of the hourly difference is happening after the click, in whether the person who clicked goes on to fill in the form.

The floor, and what survives it

Six hours had fewer than 20 leads. They are the hours that produce the dramatic numbers, in both directions.

Hour

Spend

Leads

CPL

Reading

01:00

$655

18

$36

Cheapest hour in the raw table, two leads short of the floor

02:00

$452

10

$45

Below floor

03:00

$358

6

$60

Below floor

04:00

$403

4

$101

The headline worst hour, on four leads

05:00

$617

10

$62

Below floor

07:00

$1,591

16

$99

Second-worst raw hour, four leads short of the floor

Two things in that table are worth stopping on. The raw cheapest hour is not 23:00, it is 01:00 at $36. It is on 18 leads, so we do not rank it, but it means the "$40 best hour" in the title is already a floored figure. And 07:00 at $99 on 16 leads sits right next to 08:00 at $87 on 21 leads. One is above the floor and one is below, and they tell the same story. We would not bet on the exact 07:00 number, but the direction is clear.

Here are the 18 hours that cleared the floor, ranked.

Rank

Hour

Leads

CPL

1

23:00

28

$40

2

21:00

46

$48

3

06:00

22

$49

4

15:00

35

$50

5

18:00

41

$50

6

14:00

35

$51

7

16:00

36

$52

8

11:00

31

$53

9

10:00

32

$54

10

19:00

40

$54

11

13:00

31

$55

12

00:00

20

$56

13

20:00

40

$56

14

17:00

34

$58

15

09:00

31

$59

16

22:00

31

$60

17

12:00

23

$72

18

08:00

21

$87

Sixteen of the 18 sit between $40 and $60. Once the low-volume hours are set aside, the day is mostly flat, with a cheap hour at the end of it and two expensive ones (12:00 at $72 on 23 leads, and 08:00 at $87 on 21) that are both close enough to the floor to deserve some scepticism. The headline figure, that cost per lead varies 2.2x by hour, is the ratio of $87 to $40. The 2.5x you get from the raw table ($101 to $40) is the ratio of a four-lead hour to a 28-lead hour, and it is not a real number.

Why this happens

Three mechanisms sit under the table, and only one of them is about the hour.

The first is auction price. CPC is highest from 06:00 to 08:00 ($1.50, $1.63, $1.53) and lowest from 20:00 to 23:00 ($1.18, $1.12, $1.14, $1.19). The auction is priced by competition for the people online at that moment, and that part of the hourly pattern is Meta's, not the advertiser's.

The second is what people do after clicking. The lead rate per click is not in the pull, but the numbers imply it: 07:00 and 08:00 have the highest CPCs and the highest CPLs, while 21:00 and 23:00 have the lowest of both, and the CPL spread (2.2x floored) is wider than the CPC spread (1.46x). Someone who taps a lead form at 07:45 on the way to work is less likely to finish it than someone on the couch at 21:30. Meta counts the click either way; the form only counts when it is submitted.

The third mechanism is the one that matters for decisions. Meta's lowest-cost bidding (post 21: 826 of 1,134 campaigns run lowest cost with no cap) is already moving spend across the hours in response to auction price. It learns from leads wherever they fall, but it has no explicit notion of "07:00 is bad". The spend curve in the first table is the auction curve, not the lead curve.

What it does to decisions

The Google Ads sister series covered the same question in the dayparting post, and the answer there was that ad-schedule bid adjustments are ignored by smart bidding except at minus 100%, so the only real lever is on or off. Meta is the same, with an extra constraint: ad scheduling is only available on ad sets with a lifetime budget. Daily-budget ad sets, which is most of them, cannot daypart at all.

So the decision reduces to: is there a block of hours you would switch off entirely, and would you accept a lifetime budget to do it?

Day part

Hours

Spend

Leads

CPL

Overnight

00:00 to 05:59

$3,605

68

$53

Morning

06:00 to 08:59

$4,498

59

$76

Working day

09:00 to 16:59

$13,955

254

$55

Evening

17:00 to 22:59

$12,508

232

$54

Late

23:00

$1,119

28

$40

Summed from the hourly rows, the blocks tell a simpler story than the hours. Overnight, the working day and the evening all land within $2 of each other, at $53 to $55. The 23:00 hour is cheap on its own, but it is one hour. The morning block, 06:00 to 08:59, is the outlier at $76 on 59 leads, and it is the only block where the answer to "is this worth switching off" is not obviously no.

Even there, be careful. The morning block is $4,498 of the $35,688, about 12.6% of the slice. Switching it off does not save $4,498; a lifetime-budget ad set will spend that money in the remaining 21 hours, and the question is whether those hours can absorb it at $53 to $55 or whether the marginal lead there costs more than $76. The hourly table cannot answer that. Only a test can, and the volume-floor post in the Google series shows how many leads a test needs before a $76 against $55 difference is more than noise. On 59 leads in the morning block, we would call it suggestive and run it further, not act.

What we would not do is cut 04:00. It is $403 and four leads. Any decision made on it is a decision made on four people.

Where it varies

It does not, in this pack, because it cannot. The four accounts are pooled and we have not split them. A per-account hourly table would put nearly every cell under the 20-lead floor: 641 leads across four accounts and 24 hours is an average of under seven leads per cell. The same applies to bands. The pull has no band split for the hourly breakdown and we did not build one.

The variation that is in the data is the spread between the floored hours, $40 to $87, and the spread between the day parts, $40 to $76. Both are smaller than the raw table suggests and both rest on one twentieth of the spend. Treat the pattern as a hypothesis for your own account, not a benchmark. It is the sort of check we run on an account before proposing any schedule change in our Facebook and Meta Ads management, and most of the time the floored version of the table says "leave it alone".

What to check in your account

  1. In Ads Manager, set the date range to at least 90 days, then Breakdown, By time, Time of day (ad account time zone). Add the columns Amount spent, Results, Cost per result, Link clicks and CPC.

  2. Write the lead count for every hour next to its cost per result. Grey out any hour with fewer than 20 leads. Do not rank those hours; they will always contain the cheapest and dearest figures and neither is real.

  3. Sum the surviving hours into three or four blocks (overnight, morning, working day, evening) and compare cost per lead by block. Blocks clear the floor when hours do not.

  4. Compare the CPC spread with the CPL spread. If CPL moves more than CPC, the hour is changing what happens after the click, and the fix may be the form or the page at that hour rather than the schedule.

  5. Check the budget type on the ad sets you would want to schedule. Daily budget means no scheduling. Switching to a lifetime budget changes pacing on its own, so make that change first, let it settle, and measure again before adding a schedule.

  6. If one block is 40% or more above the others on 50 or more leads, run it as a split: one ad set with the block excluded, one untouched, same budget. Judge it on leads, not on the hourly table.

  7. In the API, breakdowns=hourly_stats_aggregated_by_advertiser_time_zone with fields=spend,ctr,cpc,actions,cost_per_action_type returns the table above per account. If it returns nothing, the account is one of the 19; do not fill the gap with an assumption.

The principle

Hourly reports are the most dramatic table in any ad platform, because 24 buckets with a few leads each will always produce a very cheap hour and a very expensive one. The spread is a property of the bucketing, not of the hours. Floor the buckets, merge them into blocks, and the drama mostly disappears, leaving one or two questions worth a test. And when the data covers a twentieth of the spend, say so in the first paragraph, because a pattern on 4.6% is a hypothesis about the other 95.4%, not a description of it.

Filed under
meta-adsfacebook-adsdaypartingad-schedulingcost-per-leadhour-of-dayvolume-floors