maybe use the provider id as the key where the list response has one, since a title edit can change the slug and make the same job look like a close plus a new listing. the url could stay as a fallback for the rest
do you cap the attempts on the 15 min embedding re-pick? if not, a row that keeps failing would hold one of the 30 slots per minute and slow down fresh jobs, and detail_attempts parking might fit there too. for alerting the number of closes the guard holds back run to run could be a nice early signal that a platform is quietly misbehaving