The quality of any Marketplace tool is decided by its parser, not its fetcher. Getting the page is plumbing. Deciding that "2016 civic ex CLEAN needs nothing $8500 obo" is a 2016 Honda Civic EX at $8,500, and that "CIVIC FRONT CLIP 06-11" is not a car at all, is the actual product.
If you are evaluating a Facebook Marketplace parser, or thinking about writing one, this post covers the cases that separate a useful deal feed from a noisy one. They all come from how real sellers actually write listings.
Listings are written by humans in a hurry
There is no clean data model on the seller's side. A private seller types a title on their phone in thirty seconds. That gives you inputs like:
- Prices as attention bait: $1 or $1,234 on a car that is obviously five figures, because the seller wants you to "message for price"
- Typo prices: $800 where $8,000 was meant, and the reverse
- Parts and shells: "parting out," "front clip," "engine only," listed in the same vehicle category as running cars
- Salvage and rebuilds mentioned only in the description, three paragraphs down
- Years in the title that disagree with the structured field, or appear only as "06" or "2k12"
A parser that takes titles at face value forwards all of this to you. Then you spend your evening opening rows that a stricter reader would have dropped.
The four fields that carry the weight
For vehicles, almost everything hangs on four extractions:
- Make and model. "Chevy" and "Chevrolet" are one make. "Mazda3," "Mazda 3," and "mazda3 hatch" are one model. Without canonical identities behind the strings, your saved search for one model silently misses spellings of it. Crawlbench resolves vehicle listings against a harvested catalog of Marketplace's own make and model identities rather than matching raw text.
- Price. The number is easy. Knowing when to distrust it is the skill. A $1 price is a signal to handle, not a bargain to alert on.
- Year. A year floor is the cheapest junk filter that exists, and it only works if the parser found the year reliably.
- Posted time. Recency is the difference between a lead and an archive entry. When a listing does not expose its post time up front, the honest options are to hold it until the time can be backfilled or say plainly that it is unknown. Crawlbench holds match creation until the posted time is confirmed or enrichment gives up, because alerting you to a three-week-old listing as "new" is worse than a short delay.
Parsing sets up the gate, it does not replace it
Clean extraction is the input. The decision still belongs to a filter gate: does this listing pass your price cap, year floor, make and model, excluded terms, and recency window, yes or no.
The practical consequence for buyers is about trust. When an alert arrives, you should be able to see why it passed. Crawlbench stores the reasons a listing cleared your filters and shows them on the match (features), so a bad alert is diagnosable: either the parse was wrong or your rule was looser than you thought. Without that, every false positive is a mystery and you slowly stop trusting the feed.
What this means if you are choosing a tool
- Test any tool with ugly listings, not clean ones. Feed it a "parting out" row and a $1 price and watch what happens.
- Ask how it handles listings with no visible post time. "We alert anyway" means your recency filter is decorative.
- Prefer tools that show why a listing matched. Explainable matches are the only way to tune filters with confidence.
What this means if you are building one
Budget most of your effort for normalization, not fetching. A make and model dictionary, price sanity rules, a year extractor that survives "2k12," and a policy for missing post times will do more for your output quality than any amount of fetching cleverness. And expect drift: sellers keep inventing new ways to write "needs nothing."
If you would rather have the parsing problem be someone else's, that is the part of the job vehicle monitoring exists to own. Either way, judge any parser by its worst input, because Marketplace will supply plenty of those.