---
title: "Tennis court heatmap generator app: what the picture actually tells you"
description: "What a tennis court heatmap generator app reveals about your placement, how it's built from one phone video, and where accuracy decides signal from decoration."
slug: "tennis-court-heatmap-generator"
date: "2026-07-11"
author: "Akshay Sarode"
authorBio: "Founder, AceSense. Building AI tennis tools in Europe."
category: "Feature"
schema: "BlogPosting"
faq:
  - q: "What does a tennis court heatmap generator app actually measure?"
    a: "It measures where your shots bounced. The app detects the court, tracks the ball, finds the bounce point of each trajectory, and projects those points onto a top-down court diagram, coloured by frequency. You can filter by shot type, by player, by serve number, and by point outcome. It measures placement, not intent."
  - q: "How accurate is the bounce position on a phone-filmed heatmap?"
    a: "On AceSense, median bounce localisation is about 22 cm on hard court and about 38 cm on clay, filmed from the recommended angle. Court zones are 2 to 4 metres deep, so a sub-50 cm error does not change which zone a shot lands in. That resolution is enough for pattern reading, and nowhere near enough for line calls."
  - q: "Can a heatmap tell me why I lost a match?"
    a: "No. A heatmap shows where the ball landed, not whether it was the right shot to hit or what your opponent did to force it. Reading intent and tactics from a bounce map is guessing. That part is still a coach's job, and the honest apps say so."
  - q: "Do I need a special camera setup for the court model to work?"
    a: "You need a stationary camera behind the baseline, roughly 5 to 10 ft high, with the whole court in frame, shot on the main 1x lens at 30fps or higher. If a sideline is out of frame or the lens is ultrawide, the court model drifts and the heatmap misplaces bounces."
  - q: "Is the heatmap free, or is it a paid feature?"
    a: "On AceSense the heatmap is included on every tier, including the free tier, which gives you 3 analyses a month with no card. It is the same heatmap at the same accuracy on every tier. The free tier is rate-limited, not feature-limited."
---

# Tennis court heatmap generator app: what the picture actually tells you

Search for a tennis court heatmap generator app and you get two kinds of results. Some apps draw a pretty coloured court and call it a day. Others treat the heatmap as the last step of a measurement pipeline, where the picture is only as trustworthy as the court detection and bounce mapping underneath it. The difference matters more than the colours, and most of the marketing skips it.

I'm Akshay Sarode. I built AceSense, so I have a stake in you deciding our heatmap is worth generating. I'll flag where I'm taking sides. But how a heatmap is built, and where it breaks, is the same regardless of which app you use, so most of this post is vendor-neutral. The goal is that you can read any app's heatmap and know whether to trust it.

## Bottom line up front

- A court heatmap is a top-down picture of where your shots bounced, coloured by frequency, and filterable by shot type, player, serve number, and point outcome. It shows **placement, not intent**.
- It tells a club player things they genuinely cannot self-diagnose: depth distribution, cross-court versus down-the-line bias, and how tightly first and second serves cluster.
- It cannot tell you **why** you lost, or whether a shot was the right choice. That is tactics, and tactics still need a coach.
- Whether the heatmap is signal or decoration is decided by two numbers you should ask any app to publish: **court keypoint detection accuracy** and **bounce localisation error**.
- On AceSense those are >99% (hard) and ~97% (clay) court detection, and ~22 cm (hard) and ~38 cm (clay) median bounce error. Full method at [/accuracy](/accuracy). The feature deep-dive is at [/features/court-heatmap](/features/court-heatmap).

## What a court heatmap actually shows a club player

Amateur players have a strong sense of their technique and a weak sense of their placement. You know what your forehand looks like. You have watched yourself in a mirror. What you cannot do without external data is say where the ball actually went. A heatmap fills exactly that gap, and there are three readings that pay off immediately.

**Placement patterns.** Filter to forehands only and look at the densest area. Then filter to backhands only. If the two clusters sit near each other in the middle of the court, your geometry has collapsed: you are hitting both wings to the same place, and your opponent gets to camp there. If your forehands stretch to the cross-court corner and your backhands stay central, that is a real, visible asymmetry you can work on.

**Depth distribution.** This is the one most players are blind to. In one sample report we walk through at [/sample-report](/sample-report), the heatmap showed the player's returns clustered short, inside the service line. Stroke quality was fine. Depth was the problem, and it was quietly handing away court position on every return. You do not feel that during a match. You see it instantly on the map.

**Serve placement tendencies.** Filter to serves, then to first serves, then to second serves. First serves should scatter near the lines: T, body, wide. Second serves get more conservative, but the question is how much more. A second-serve cluster sitting fat in the middle of the service box is a return-of-serve invitation, and the heatmap draws it as a tight blob you cannot argue with.

## What a heatmap can't tell you

Here is where I want to be honest rather than promotional, because overselling this feature is how apps lose trust.

A heatmap shows **where** the ball landed. It does not show **whether that was the right shot to hit**. A deep cross-court forehand and a deep cross-court forehand hit off the wrong foot under pressure look identical on the map. The picture has no opinion about shot selection, court position, or what your opponent did to force the ball. Reading tactics off a bounce map is guessing dressed up as analysis.

It also does not encode **intent** or **opponent strength**. A heatmap against a 2.5 hitter and one against a 4.0 hitter can look completely different for the same player, because the other side of the net is shaping every rally. So the map cannot tell you why you lost. It can only tell you what happened spatially, and leave the causation to you and your coach. Any app that claims its heatmap explains your defeats is selling you a story the data does not support.

## How the heatmap gets generated from one phone camera

You do not need to be technical to read a heatmap, but knowing how it is built tells you when to trust it. Reader-level, it is three steps.

**Court keypoint detection.** The app finds six anchor points on the court: the four corners and the two T-points where the centre service line meets each service line. Six known points on a rectangle of known size are enough to lock the geometry.

**Homography.** With those six points, the app solves a perspective transform, called a homography, that maps camera pixels to real-world court metres. This is the step that lets the app say "that bounce was 1.2 metres inside the baseline" instead of "that bounce was at pixel (840, 512)". Everything downstream lives in metres because of this.

**Bounce mapping.** The ball is tracked frame by frame. Each bounce is the point where the reconstructed trajectory crosses the court plane. That bounce point is re-projected through the homography onto a flat top-down court diagram. Do this for every shot in the match, colour the result by density, and that scatter is your heatmap. The full five-model pipeline is written up plainly at [/how-it-works](/how-it-works).

The practical takeaway: the heatmap is a chain. Court detection feeds homography feeds bounce mapping. A weakness early in the chain shows up as a confidently-drawn, quietly-wrong picture at the end.

## Why accuracy decides whether the heatmap is signal or decoration

This is the section that separates a useful heatmap from a decorative one, and it is the reason I push AceSense to publish numbers most competitors do not.

If court detection is off, every bounce is placed on a court that is itself in the wrong position. The picture still looks authoritative. It is just measuring the wrong reference frame. So the honest question to ask any tennis court heatmap generator app is not "does it have a heatmap" but "how accurate is the court model, and how accurate is the bounce point".

Here are AceSense's published figures. Court keypoint detection is measured as the share of frames where all six keypoints land within ±15 pixels of human-labelled ground truth: >99% on hard court, ~97% on clay, ~96% indoor. Bounce localisation median error is ~22 cm on hard and ~38 cm on clay. Court zones are typically 2 to 4 metres deep, so a sub-50 cm error does not flip which zone a shot belongs to. That is the whole argument: the resolution is comfortably enough for zone-level pattern reading, and nowhere near enough for line calls. We do not pretend otherwise.

The behaviour when detection fails matters just as much as the headline number. When AceSense cannot lock the court confidently, it skips the heatmap and the bounce map rather than fabricate a court geometry, and still returns the camera-relative stroke-quality report. I would rather ship a partial report than a confident lie. Every number here, plus the failure modes, is at [/accuracy](/accuracy).

## How to read one heatmap week over week

A single heatmap is a snapshot. The real value shows up when you stack them, and the thing to watch is **drift**.

**Depth drift.** Pull up your return cluster from last week and this week, against opponents of similar level. Is it creeping forward, toward the service line, which means shorter and more defensive? Or is it sitting deeper? A cluster sliding forward over three sessions is an early warning that shows up on the map weeks before it shows up in your results.

**Serve-mix drift.** Track your T-versus-wide split on first serves across matches. If the map shows you drifting toward all-T, you are becoming predictable, and a returner who has seen you twice will start cheating that way. The heatmap is the only place a club player can actually see that mix change over time.

One caveat that keeps this honest: the heatmap is not normalised for opponent strength, so only compare matches against similar opponents. Comparing a session against a pusher with one against a hard hitter tells you about them, not about your drift.

## How to film so the court model locks on

Because the whole chain starts with court detection, filming is not a nice-to-have. It is the input the model lives or dies on. The setup that keeps the homography stable:

- **Behind the baseline, 5 to 10 ft high, whole court in frame.** From this angle all six keypoints are visible cleanly. Hip-height behind the fence occludes the far corners and the solver gets unstable.
- **Stationary camera.** Hand-held footage drifts the homography frame to frame and widens every confidence interval. A fence clip or tripod fixes this.
- **Main 1x lens, not ultrawide.** Ultrawide and fish-eye modes add barrel distortion the homography does not fully correct.
- **30fps or higher, 1080p or better.** Below 30fps the ball trajectory through a fast serve cannot be reconstructed, and low resolution blurs the court lines the keypoint model needs.

The failure that trips people up most: if a sideline is just out of frame, bounces in that strip are never tracked, and the heatmap looks like you never hit there. Absence on the map is not the same as absence on the court. The full setup walk-through is at [/how-to/film-your-tennis-match](/how-to/film-your-tennis-match).

## Honest limits

A short, real list, because a heatmap oversold is a heatmap distrusted:

- **Not a line-call tool.** Sub-50 cm error is excellent for zones and useless for lines. Do not argue calls with it.
- **Not a tactical analyzer.** It shows where shots landed, not whether they were the right shots.
- **Worn or obscured lines shift the reference frame.** On heavily kicked-up clay or faded lines, the detected court can be off by 30 to 80 cm. Relative patterns, your forehand cluster versus your backhand cluster, stay useful. Treat the absolute zone labels with skepticism, and watch for the low-confidence warning.
- **Doubles is beta.** The court assumption and per-player attribution are less reliable than singles.

## How to try it

On AceSense the heatmap is included on every tier, including the free tier: 3 analyses a month, no card, the same heatmap at the same accuracy as the paid tiers. The free tier is rate-limited, not feature-limited, on purpose. The fastest way to judge any of this is to generate a heatmap from one of your own matches and check whether the clusters match what you thought your game looked like. They usually do not, and that gap is the whole point.

---

**Read next:** [The court heatmap feature in full](/features/court-heatmap) · [Accuracy methodology and numbers](/accuracy) · [A sample post-match report](/sample-report) · [How AceSense works](/how-it-works)
