Roof Inspection Reports: Photos to a Customer-Ready Report With AI

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Roof Inspection Reports: Photos to a Customer-Ready Report With AI.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Roof Inspection Reports: Photos to a Customer-Ready Report With AI.

Photograph the roof in a fixed order, caption each photo with what you saw and where, let an AI tool turn the captions into a findings table and plain-English recommendations, then check every finding against its photo before sending. AI describes pictures; it cannot see underlayment, decking or attic conditions you did not photograph.

The weak point is the input, not the model. CompanyCam's help centre says its AI documents write from the descriptions attached to photos, and a photo with no description produces an empty section. A general chatbot has the same problem with unlabelled images. So the order of work is captions first, report second, and a self-check that no tool can do for you.

Follow me on Instagram@sagnikteaches

What the customer reads: a five-page layout

Customers read page one and skim the rest. Design the report so that page one could stand alone and the remaining pages prove it.

Connect on LinkedInSagnik Bhattacharya
PageContentWho writes it
1Summary: overall condition in one sentence, the three priority actions, what was not inspectedYou decide the condition sentence; AI can draft the rest
2Findings table: ID, location, component, observation, photo numbers, priorityAI drafts from your captions; you verify every row
3 and 4Photo pages: six photos per page, each with its caption and finding IDCaptions from you; layout by the tool
5Recommendations by priority level and the next step, in plain wordsAI drafts; you edit
FooterScope and limits: date, who inspected, how (ladder, drone, walked), what was not inspected, what the report is notYou, once, as a template

The condition sentence on page one is the one thing I would never let the model choose. Everything else on that page restates the table. The sentence is a judgement, and it carries your name.

Subscribe on YouTube@sagnikteaches

The roof walk: capturing with the report in mind

A report's structure starts at the camera. Shoot in the same order on every job so photo numbers map onto the layout without any sorting afterwards.

Shot groupWhat to captureWhat it does in the report
ContextJob reference on paper, front of the houseTies the report to one property and one visit
ElevationsFour sides from the groundPlaces each slope on the building
Slope overviewsOne per slope, same side every timeShows general condition before the details
Ridge, hips, valleysOne photo per runCaps, junctions and debris
Penetrations and flashingsVents, pipe boots, chimney, skylights, each whole then closeWhere leaks usually start, so findings cluster here
Gutters and downspoutsEach run and each outletRoof-edge findings and granule build-up
Shingle conditionClose-ups with a tape or coin for scaleEvidence for each condition you list
Attic or undersideIf accessible and safe; otherwise one photo of the blocked hatchEither evidence, or proof that it was not inspected
Nothing foundTwo photos of slopes or details with no defectsShows the customer what good looks like and that you checked

The last row matters more than it looks. A report made only of defects reads as a sales document, and a customer who sees two photos of a sound garage slope trusts the other findings more. The blocked-hatch photo does similar work: it turns "attic not inspected" from an excuse into a fact with evidence.

The Complete Excel Course with AI Integration thumbnail

The Complete Excel Course with AI Integration

From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.

By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner

Buy now

Voice captions on the roof: what CompanyCam's AI actually does

Four CompanyCam features matter for this job, and its help centre describes each one plainly.

  • Quick Caption. Take a photo, tap the microphone and say what it shows; the app saves a description with the photo. It works in the mobile app, on every plan, and is outside the AI action limit. CompanyCam's best-practices article says the output is summarised rather than word for word, so check what was saved.
  • Walkthrough. Mobile only. You take photos while dictating, for up to 15 minutes, and the result is an editable document with the photos arranged in order. It is not live video, it works offline if the project was opened first, and it can be turned into a checklist.
  • AI documents. Summary, Daily Log and Progress Recap are generated from photos you select. The help centre says they need photo descriptions, and the best-practices article adds comments and tags as useful context. They sit on select plans and use AI credits, and a photo without a description leaves that part of the document empty.
  • AI checklists. "Talk to Create" builds a checklist from spoken instructions, an existing document or a Walkthrough note. "Talk to Complete" updates checklist fields from a spoken description and optional photo proof. Both are mobile only and on select plans.

Plan details need care. As of November 2026, CompanyCam's pricing page shows Core, Crew and Scale at $63, $119 and $249 a month on annual billing, with 10, 100 and unlimited AI credits and extra users at $29 each. Its FAQ says AI features are included in Crew, Scale and Enterprise, and the help centre says only "select plans". Those do not quite agree, and the same pricing page showed $129 and $199 for the two higher plans in late October, so prices are moving. Ask which plan covers the documents you want before you build a routine around it.

Dictating captions that survive the trip into a report

CompanyCam's best-practices article tells users to be specific, give context such as room names or directions, speak clearly, keep background noise down and avoid speaking too fast, as if on a phone call. On a roof, wind is the enemy: hold the phone close and pause between photos. The formula is simple: where, which component, what you see, and a size or count.

Spoken on the roofBetter version
"Bad boot.""Rear slope, pipe boot by the vent stack, rubber collar cracked all the way round."
"Ridge looks rough.""Ridge, front to back: three cap shingles lifted at the edge, sealant strip showing."
"Gutter problem.""Rear gutter, left end: granules and leaves packed along the run, downspout outlet blocked."
"Flashing.""Chimney, left side: sealant along the step flashing cracked for about fourteen inches. Metal in place."
"Shingles worn.""Front slope, lower half: granule loss and curled tab edges. Roof age twenty-one years, from the owner's installation invoice."

Because captions are summarised rather than transcribed, a number you speak can vanish. After the walk, read each saved caption and put any missing count or measurement back by hand. This takes a couple of minutes and prevents the most embarrassing kind of error, which is a table that says "cracked" without saying how much.

From captions to a findings table

Take a pre-sale inspection of a two-storey house with a four-slope asphalt-shingle roof of about 28 squares. The owner's installation invoice shows the roof is 21 years old, which is the only reason its age can appear in the report. The walk produced 41 photos, nine table rows and one honest gap. All of it is illustrative.

Define the priority labels once, on page two, and never bend them. Now means the condition could let water in and should be dealt with within two weeks. Soon means arrange it within six months. Monitor means no action now and a re-check at the next inspection.

IDLocationComponentObservationPhotosPriority
F1RidgeCap shingles3 caps lifted at the edge, sealant strip visible12-13Soon
F2Rear slope, by vent stackPipe bootRubber collar cracked all the way round16-17Now
F3Front slope, lower halfShinglesGranule loss and curled tab edges; roof age 21 years (owner's invoice)7, 31-33Monitor
F4Chimney, left sideStep flashingSealant cracked over about 14 in; metal in place20-21Soon
F5Valley, rear to garage slopeValleyDebris and moss along about 6 ft14-15Soon
F6Rear gutter and downspoutGutterGranules and leaves packed along the run; downspout outlet blocked25-27Soon
F7Front slope, near eavesNail heads3 raised nail heads lifting the shingle above34-35Soon
F8Garage slopeShinglesNo visible defects40-41None
F9AtticDecking underside, ventilationNot inspected: hatch blocked by stored items39Unknown

Row F9 is the one the AI will drop. It has no defect and no real caption, and models drift towards leaving out nothing-to-report entries. Add it yourself every time. Row F8, the sound garage slope, is the row customers remember.

The prompt: captions in, findings table out

This step uses text only. The photos stay out of it on purpose, so every word in the table traces back to something you said or typed. Anthropic's documentation warns that Claude might hallucinate or make mistakes with low-quality, rotated or very small images, and a table built from captions cannot inherit that problem.

You are helping a roofing contractor draft a roof inspection findings table. I will give you numbered photo captions that I wrote or dictated. Build the table from those captions only.

Columns: ID, Location, Component, Observation, Photos, Priority.

Rules:
- One row per distinct condition. Never merge two conditions into one row and never split one condition across rows.
- Keep the observation at the level of my caption. Do not upgrade "sealant cracked" to "failed", "worn" to "damaged", or anything to "leaking".
- Do not mention hail, storms, wind, age, insurance, causes or lifespan unless my caption does.
- Priority comes only from these definitions: Now = could let water in, act within two weeks. Soon = arrange within six months. Monitor = re-check at the next inspection. None = no defect found. Unknown = not inspected. If a caption does not give enough to decide, write CHECK.
- Include a row for anything I flag as NOT INSPECTED, with Priority Unknown.
- No recommendations and no prices in this table.

CAPTIONS:
[numbered captions]

An illustrative first run returned this, and it needed five corrections:

| ID | Location | Component | Observation | Photos | Priority |
| F1 | Ridge | Cap shingles | Failed caps lifted at the edge, sealant visible | 12-13 | Soon |
| F2 | Rear slope, vent stack | Pipe boot | Rubber collar cracked all the way round, leaking | 16-17 | Now |
| F3 | Front slope, lower half | Shingles | Hail damage: granule loss and curled tab edges | 7, 31-33 | Now |
| F4 | Chimney | Flashing | Sealant cracked over about 14 in; metal in place | 20-21 | Soon |
| F5 | Valley and nail heads | Valley, nails | Debris and moss along about 6 ft; 3 raised nail heads | 14-15, 34-35 | Soon |
| F6 | Rear gutter | Gutter | Granules and leaves packed along the run; downspout outlet blocked | 25-27 | Soon |
  • F1, "failed caps". The model upgraded "lifted" to "failed". Put my wording back.
  • F2, "leaking". No caption says water is getting in. Delete the word. The row stays at Now because the priority definition allows it, not because of a leak.
  • F3, "hail damage" and Now. The model brought in a cause I never wrote, then rated a condition that fits Monitor as Now. Restore the caption's wording and set Monitor.
  • F5, two conditions in one row. The valley and the nail heads were merged, which the rules forbid, and the photo ranges were mashed together. Split them back into F5 and F7.
  • F8 and F9 missing. The table stopped at six rows. The clean slope and the not-inspected attic were the first things to go.

Rules in the prompt make slips like these less likely, but they cannot prevent them. That is why the review step is not optional, and why the later sections spend as long on checking as on drafting.

Recommendations that stay inside what you saw

Page five is where reports turn into overclaims. Every recommendation follows one pattern: what was observed, what you recommend, and what you did not check. The AI drafts the sentences from the table. You hold the line on the rewrites below.

OverclaimRewrite that stays inside the evidence
Your roof is at the end of its life.Granule loss and curled tab edges are visible across the lower half of the front slope. The owner's invoice puts the roof at 21 years old. We recommend a re-inspection in 12 months and budgeting for replacement.
The leak is coming from the pipe boot.The pipe boot collar is cracked all the way round, and a cracked collar can let water in. We recommend replacing it. We did not inspect the attic, so we cannot say whether water has entered.
There is structural damage to the decking.Decking condition: not inspected. Soft spots can be confirmed only from the attic or once the roof covering is off.
This roof has five years left.Roof age is 21 years, from the owner's invoice. We have not estimated remaining life from a visual inspection.
Storm damage throughout.Delete. If the owner is considering an insurance claim, keep this report separate from that process.

A few rules keep page five honest. Every recommendation names a finding ID. The verbs are "we recommend", never "you must". "Likely" appears only with a stated basis. And prices live on their own page, because a recommendation is not a quote; the roofing proposal software tutorial on AI-written scopes and warranty wording picks up where this report ends. If a claim is in play, follow the claim-neutral wording in roof damage reports for insurance claims instead of this layout. If you are building a library of standard comments for findings you meet constantly, the home inspection comment library tutorial shows how to keep one.

Building it in CompanyCam: templates and AI documents

The route below follows CompanyCam's help centre. Each step is described there; the order is mine.

  1. Make the template once, on the web. Under Templates, then Documents, choose Create Document Template. Add a cover page, then Notes, Table and Photo sections for scope and limits, findings, photos and recommendations. Typing two curly brackets in the text lets you pick project fields, so the cover page fills itself. Admins and Managers can create templates, and variables do not update documents that already exist.
  2. Caption on the roof. Use Quick Caption for each photo, or a Walkthrough if you prefer one continuous dictation.
  3. Generate the prose. In the project, open Documents, choose New Document, then Summary from the tiles (Progress Recap sits under More Templates, then AI Templates). Select the photos and press Generate. The output is "a short update about the work", so it will not know your priority labels.
  4. Keep your own table. Build the findings table with the text-only prompt above and paste it into the template's Table section.
  5. Review everything. The help centre says to always review AI-generated content and edit or correct the output as needed.

Two extras are worth knowing about. The help centre lists an article on converting a PDF into a Document Template with CompanyCam Assistant, which is worth reading before you rebuild an existing inspection form by hand. It also documents an MCP server, in beta, that lets assistants such as Claude and ChatGPT ask questions of project data, and depending on the actions available, create or edit project information. Treat anything that can edit your job record with caution. If you are weighing CompanyCam against other apps, CompanyCam alternatives for roofers compares photo reports and checklists across the field, and voice AI for inspection notes and estimates covers the dictation side in more depth.

The same job with a chatbot and a spreadsheet

No CompanyCam needed. The skeleton is a spreadsheet with five columns: photo number, shot group, caption, count or measurement, and finding ID. Fill the caption column by typing, or by dictating into your phone's notes while you walk and pasting the result in.

  • If you want a chatbot to caption from the photos, upload them in batches by slope. claude.ai takes up to 20 images per message and Gemini apps take 10 files per prompt, so batches of eight to ten keep things manageable. Put the images before your text, and supply your own counts.
  • Do not expect it to know dates or locations. Anthropic's documentation says Claude receives no image metadata, so the date and slope label go into the caption yourself.
  • Build the findings table with the text-only prompt from earlier, from the caption column alone.
  • Lay it out in a word-processor template with the five pages above and export a PDF.

A $20-a-month plan covers this volume: ChatGPT Plus is $20, Claude Pro is $20 ($17 a month billed yearly) and Google AI Pro is $19.99. For the illustrative roof, plan on roughly 35 minutes for the walk, 15 for tidying captions, 5 for the table draft, 25 for review and 15 for layout: about 95 minutes door to door. A tool with templates and voice captions might bring that nearer 70. Both figures are planning guesses, so replace them with your own timings after three jobs.

The self-check: what AI cannot verify and how you do

This table is the reason for the headline question. Each row is something that looks like a fact in a draft and is not one until you have checked it.

Claim in the draftWhy AI cannot settle itHow you verify
Counts: "3 caps lifted"Anthropic's documentation says counts are approximate, especially with many small objectsCount in the photo or from your site notes and compare with the caption
Priority: Now, Soon, MonitorIt follows your definitions but cannot judge urgency from a pictureCheck each rating against the definitions on page two
Cause of a conditionA photo shows a condition, not why it happenedLeave cause out unless your own inspection supports it
Material, layers, roof ageNot reliably visible in photosUse the invoice or permit, or write "not documented"
Condition under the shinglesUnderlayment and decking are not in the photosWrite "not inspected" unless you saw them from the attic or an open area
Attic moisture and ventilationPhotos show stains, not moisture readings or airflowTake a reading, or write "not inspected"
MeasurementsSpatial outputs are approximateTake them from a measurement report or a tape
Which photo belongs to which findingReferences can drift when many photos are involvedOpen each referenced photo beside its row
Missing rowsModels drop nothing-found and not-inspected rowsCompare the row count with your caption list

The routine behind the table is mechanical. Open each finding beside its photos, spend thirty seconds per finding and about twenty seconds per photo on the rest, and tick the table rows off against the caption list. For nine findings and 41 photos that is roughly twenty minutes. Tools that claim to detect conditions automatically from drone or phone images move some of this work, and what drone and photo inspection tools really detect is worth reading before you rely on any of them. Even then, your name is on the report.

A cold read to prove the report works

Once the check is done, test the document on someone who was not there. Give a colleague the finished report and ask them to point at the photo for each finding and say, in their own words, what its priority label means. Any hesitation marks a caption that is too vague or a label that is not defined. Do the same with the first few customers by phone: note every call that starts "what does this mean?", because each one points at a sentence to rewrite.

Track one number over your first month of reports: how many captions and table rows you changed by hand during review. It should fall as your dictation improves and your prompt rules settle. If it stays high, the input is the problem. More specific captions will do more for the report than any change to the prompt.

Questions roofers ask about AI inspection reports

Do I need CompanyCam to use AI on roof inspection photos?

No. A general chatbot and a captions spreadsheet will do the job. CompanyCam saves steps with voice captions, document templates and AI documents, but its AI features sit on select plans and spend AI credits, so check what your plan includes before you build a routine around them.

Can I send the AI draft to the customer without editing it?

No. CompanyCam's help centre says to review and edit AI-generated content, and Anthropic's vision documentation says to verify image interpretations, especially for high-stakes uses. The report carries your name and your recommendations, so every finding gets checked against its photo before it goes out.

Should the report include prices?

Keep prices out of the findings table so the findings read as findings. Give the estimate on its own page or as a separate quote, with each line tagged to the finding ID it fixes. The customer can then see that the repair list comes from the report and not the other way round.

How many photos should a roof inspection report include?

Enough to show every finding, every slope and the places you checked and found fine. A four-slope roof can need around forty. The number matters less than the captions: forty photos with specific captions beat a hundred with none, and each finding should point to at least two photos.

Further reads

Sources: CompanyCam help centre articles on AI documents, checklists, Quick Caption and best practices, plus its pricing page; Anthropic vision documentation (counting, metadata, image limits).

Want reports customers read to the end?

On a 1:1 call we'll look at how inspection photos and notes become a report in your business today, find the slow or error-prone step, and decide where AI can draft safely. You leave with a routine your crew can run.

Book a 1:1 call with me