GitHub Actions 2,500+ Workflow-Run Counts: Dashboard & API Guide
QUICK ANSWER
GitHub changed filtered Actions workflow-run queries on September 25, 2026 so searches by workflow, event, status, branch or actor report “2,500+” when more than 2,500 records match instead of attempting an exact total. GitHub says paginated results still return up to 1,000 items for a filtered search and recommends narrowing filters, such as with a date range, when an integration needs more than 2,500 matching runs. Treat 2,500+ as a lower bound rather than the exact integer 2,500, and do not infer the hidden total from page count.
A dashboard expects every workflow-run total to be an exact number
A reporting job treats 2,500+ as exactly 2,500 and undercounts activity
A collector assumes pagination reveals every matching run from one broad filtered search
Historical analytics depend on one oversized workflow-run query
Possible causes
GitHub says exact counts above 2,500 frequently timed out and could show the number found before timeout rather than the true count
The September 25 change replaces that misleading exact-looking value with the explicit lower bound 2,500+
Filtered workflow-run searches have a separate up-to-1,000-result retrieval limit
Broad analytics need narrower query windows when exact enumeration is required
HOW TO FIX IT
Work from the safest step to the harder repair.
Step 1. Inventory dashboards, scripts and reports that read workflow-run counts or assume one broad query returns an exact total.
Step 2. Represent 2,500+ as a lower-bound state rather than silently converting it to the integer 2,500.
Step 3. Keep count semantics separate from record retrieval. GitHub says filtered searches continue to return up to 1,000 items.
Step 4. When exact historical enumeration is required, narrow the query. GitHub specifically recommends adding a date range.
Step 5. Use non-overlapping windows and deduplicate workflow runs by stable run identity when aggregating slices.
Step 6. For alerting, a 2,500+ response can prove that a threshold at or below 2,500 was exceeded, but it cannot prove an exact value above that boundary.
Step 7. Update exports and user-facing copy so consumers know whether a value is exact, lower-bounded or incomplete.
Step 8. Add tests for exact counts, the 2,500+ lower-bound state, the 1,000-result retrieval ceiling and adjacent date windows.
Step 9. Validate the revised collection logic against a representative high-volume repository before relying on it for historical reporting.
Need the actual code? Go to GenesisCodeDoctor.com to search the Code Store or request code for the exact platform, error, and repair you are working on.
1. Only need to know whether activity exceeded a threshold at or below 2,500? Use 2,500+ as a lower-bound signal.
2. Need an exact count above 2,500? Partition the query with bounded filters such as date ranges and aggregate the slices.
3. Need actual matching run records? Design narrower partitions around the documented filtered-search retrieval limit.
4. Dashboard only accepts numbers? Add a precision/status field rather than coercing the lower bound into an exact integer.
REPAIR FLOW
A visual path from symptom to verified production.
Observe→
Protect→
Isolate→
Repair→
Test→
Publish→
Verify live
BEFORE YOU PASTE CODE
Protect the working site first.
Model count precision explicitly so exact and lower-bound values remain distinguishable before rendering.
Use non-overlapping query windows and stable workflow-run IDs when aggregating history.
Record the query window and completeness state so later analytics do not silently mix partial and exact data.
STOP AND GET HELP WHEN
Do not turn a repair into a larger outage.
Do not present 2,500+ as exactly 2,500.
Do not claim one filtered search can enumerate every match when GitHub documents an up-to-1,000 result limit.
Do not invent an exact total by extrapolating page size or recent workflow volume.
HOW GENESIS HANDLES IT
Diagnose the exact failure before choosing a repair.
Genesis separates the visible symptom from the underlying technical cause. Run the supported diagnostic first, review the evidence, and then use a matching repair only when the failure is actually verified.
Start with a free diagnostic. If Genesis verifies a problem and a compatible treatment exists, continue to the matching Code Store product or repair path. If you cannot find the exact code you need, request it at GenesisCodeDoctor.com rather than forcing a generic snippet into the wrong platform.