What a 2,400-image Google Shopping compliance audit taught us about always inviting AI to the table.
Recently, a colleague asked me to help brainstorm whether AI could speed up a tedious task. New York had passed a law requiring advertisers to disclose the known use of an AI-generated “synthetic performer” in an ad, and one of our clients had a Google Shopping feed with 2,423 product rows and no reliable way to establish the origin of every image with a person in it. That’s not carelessness; realistic AI product imagery is a recent development, and few businesses keep records of when each photo was created or where it came from.
There’s a rule for moments like this one. Wharton professor Ethan Mollick puts it this way in his book Co-Intelligence: “Always invite AI to the table.” So rather than brainstorm in the abstract, I opened Claude Code, running Anthropic’s Fable model, and asked it to help scope the project.
We never finished scoping. Claude Code gave Fable access to the feed export and the tools already on my Mac, and instead of describing an approach, it built one: a Python script to read the feed, deduplicate the image URLs, and download every image, plus a small Swift program calling the Vision framework built into macOS to scan them. Nothing to install beyond Apple’s free developer tools, no cloud services, no client images leaving the machine. The audit was done that afternoon.
The lesson
If you’d asked me beforehand, I would have told you that planning this project and doing this project were two different kinds of work, and that the meeting I was walking into covered the first one. That assumption was wrong, and the reason it was wrong is the real takeaway.
Mollick describes AI capability as a jagged frontier: an invisible boundary where tasks that look equally difficult can sit on opposite sides, and no manual tells you where it runs. You can’t reason your way to the frontier’s shape from the outside. You find it by bringing real work to it. That’s why “always invite AI to the table” is a rule and not just an option; every invitation is also a test that redraws your map.
Two specifics moved the frontier further out than I expected. The first is tools. In a chat window, the best any model can do with a problem like ours is describe an approach. Inside Claude Code, with the feed export on disk and permission to write and run code, describing and doing become the same motion. The second is task shape. This job was bounded, repetitive, and verifiable, which is exactly the shape AI handles best. We never asked it to make a compliance judgment. We asked it to shrink a haystack.
We’re turning that into a habit: stop asking “is this an AI project?” in the abstract, because you’ll guess wrong in both directions. Bring the actual task to the actual tools and find out. The cost of testing has collapsed to nearly zero. Our test cost one meeting and returned the finished work.
The part we didn’t hand over
Speed only matters if you can trust the result, so here’s what those two scripts actually did, and what we did around them.
The Python script grouped the feed’s 2,423 rows by image URL, which boiled the job down to 1,172 unique images and guaranteed every decision applied to all variants sharing a photo. It downloaded every image in parallel, retrying failures up to three times and keeping an explicit exceptions list so nothing could silently drop out; downloads plus failures had to equal 1,172.
The Swift program then gave each image two passes with Apple’s on-device Vision framework, the same face-detection technology the Photos app uses to find people in your library. The face detector flagged 23 unique images, covering 90 product rows. A second, deliberately loose human-figure pass then swept everything the face check had passed, sending borderline cases (folded garments, product shapes) to review rather than marking them clean. The results came out as a tagged copy of the feed CSV.
Then the human part. We reviewed every flagged and borderline image, spot-checked a random 30 the detector had called clean, and reran the entire pipeline from scratch to confirm it produced identical results. Every row landed in exactly one bucket, flagged, clean, or needs review, and the buckets summed to the full row count. That’s the difference between “we checked the feed” and “we can show that every row was checked.”
The scripts covered the ground, and people made the calls: reviewing the detections and edge cases, and deciding what happens to those 90 products.
Where this leaves us
If we’d treated that meeting as a planning session, the real work would have been scheduled for the following week. Inviting AI to the table collapsed the planning and the work into the same afternoon. And we earned that without knowing it was available: we walked into the meeting genuinely unsure whether AI could help at all, and walked out with the work done. You don’t need a full picture of what AI can do before you benefit from it; you hand it real work, and the results update the picture for you. The next time a tedious, bounded, verifiable task crosses our desks, we’re skipping the brainstorm and going straight to a test.
If you’re running Shopping ads with model photography and can’t confidently say where every image came from, this same kind of bounded audit can shrink the problem to the small set that actually needs investigation, and leave a clear record of how the feed was reviewed.

