Late to this but the 300 mile thing is worth explaining because it bites everyone who builds this. Facebook's form won't take mileage under 300 on a used car. So when the scrape misses the odometer the code ends up with 0, the floor bumps it to 300, and every car posts with 300 miles. Haron your fix of "default to 300 if it's under 300" keeps that exact bug alive for every car where the scrape failed. Unknown mileage should stay blank and the post should fail loud, never a made up number. A buyer who drives out for a 300 mile car and finds 80k on the dash is a lead you lost and usually a report against the account.
Photos not attaching is almost always order and timing. CarGurus serves images off a CDN that checks the referer, and Facebook's uploader wants real files not urls, so you download first and then hand the files to the input in the right order or the hero shot ends up 7th.
On the ban comment, levin is right that form fillers are a gray area, but the bigger risk I've seen is pace. 40 cars in 20 minutes from a fresh account gets restricted. A human cadence from an account with history mostly does not. Nobody can promise zero bans though and anyone who does is selling you something.
Full disclosure I build AutoLander which does this whole workflow, so weigh my opinion with that in mind. The posting part is the easy part honestly. What dealers actually need after that is price changes flowing to the live listing, sold cars coming down the same day, and photos in a consistent order. That's where the hours actually go.