diff --git a/AGGREGATE.md b/AGGREGATE.md
index 77d92e5a1..cbb6fc0bc 100644
--- a/AGGREGATE.md
+++ b/AGGREGATE.md
@@ -505,6 +505,9 @@ As the trigger context ID in the aggregatable report explicitly reveals the
association between the report and the trigger, these reports can be sent
immediately without delay.
+When a trigger context ID is provided, the aggregatable report will not count
+towards the limit of aggregatable reports per source, nor be limited by it.
+
Note: This is an [alternative](https://github.com/WICG/attribution-reporting-api/blob/main/report_verification.md#could-we-just-tag-reports-with-a-trigger_id-instead-of-using-anonymous-tokens)
considered for [report verification](https://github.com/WICG/attribution-reporting-api/blob/main/report_verification.md),
and achieves all of the higher priority [security goals](https://github.com/WICG/attribution-reporting-api/blob/main/report_verification.md#security-goals).
diff --git a/index.bs b/index.bs
index 74875eff6..1a1aac60c 100644
--- a/index.bs
+++ b/index.bs
@@ -4274,7 +4274,7 @@ To trigger aggregatable attribution given an [=attribution trigger=]
1. If the result of running [=check if attribution should be blocked by rate limits=]
with |trigger|, |sourceToAttribute|, and |rateLimitRecord| is not null,
return it.
-1. If |sourceToAttribute|'s [=attribution source/number of aggregatable attribution reports=] value is equal to [=max aggregatable reports per source=][0], then:
+1. If |sourceToAttribute|'s [=attribution source/number of aggregatable attribution reports=] value is equal to [=max aggregatable reports per source=][0] and |trigger|'s [=attribution trigger/trigger context ID=] is null, then:
1. Return the [=triggering result=] ("[=triggering status/dropped=]
",
("[=trigger debug data type/trigger-aggregate-excessive-reports=]
", null)).
1. If the result of running [=check if an attribution source can create aggregatable contributions=]
@@ -4287,14 +4287,14 @@ To trigger aggregatable attribution given an [=attribution trigger=]
1. Return the [=triggering result=] ("[=triggering status/dropped=]
",
("[=trigger debug data type/trigger-aggregate-insufficient-named-budget=]
", null)).
1. [=set/Append=] |report| to the [=aggregatable attribution report cache=].
-1. Increment |sourceToAttribute|'s [=attribution source/number of aggregatable attribution reports=] value by 1.
+1. If |trigger|'s [=attribution trigger/trigger context ID=] is null, increment |sourceToAttribute|'s [=attribution source/number of aggregatable attribution reports=] value by 1.
1. Decrement |sourceToAttribute|'s [=attribution source/remaining aggregatable attribution budget=] value by
|report|'s [=aggregatable attribution report/required aggregatable budget=].
1. If |matchedBudgetName| is not null and |sourceToAttribute|'s [=attribution source/remaining named budgets=][|matchedBudgetName|] [=map/exists=]:
1. Decrement |sourceToAttribute|'s [=attribution source/remaining named budgets=][|matchedBudgetName|] value by
|report|'s [=aggregatable attribution report/required aggregatable budget=].
1. If |matchedDedupKey| is not null, [=list/append=] it to |sourceToAttribute|'s [=attribution source/aggregatable dedup keys=].
-1. [=set/Append=] |rateLimitRecord| to the [=attribution rate-limit cache=].
+1. If |trigger|'s [=attribution trigger/trigger context ID=] is null, [=set/append=] |rateLimitRecord| to the [=attribution rate-limit cache=].
1. Run [=generate null attribution reports=] with |trigger| and |report|.
1. If the result of [=checking if attribution debugging can be enabled=]
with |report|'s [=aggregatable attribution report/attribution debug info=] is true,