[{"data":1,"prerenderedAt":418},["ShallowReactive",2],{"navigation_docs":3,"-scraping-connect-scrape-admin":178,"-scraping-connect-scrape-admin-surround":413},[4,25,50,81,112,133,158],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":16,"path":17,"stem":18,"icon":19},"Concepts","\u002Fgetting-started\u002Fconcepts","1.getting-started\u002F2.concepts","i-lucide-book-a",{"title":21,"path":22,"stem":23,"icon":24},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-rocket",{"title":26,"icon":27,"path":28,"stem":29,"children":30,"page":6},"Workspace","i-lucide-users","\u002Fworkspace","2.workspace",[31,36,41,45],{"title":32,"path":33,"stem":34,"icon":35},"Account","\u002Fworkspace\u002Faccount","2.workspace\u002F1.account","i-lucide-circle-user",{"title":37,"path":38,"stem":39,"icon":40},"Teams","\u002Fworkspace\u002Fteams","2.workspace\u002F2.teams","i-lucide-building-2",{"title":42,"path":43,"stem":44,"icon":27},"Members and roles","\u002Fworkspace\u002Fmembers-and-roles","2.workspace\u002F3.members-and-roles",{"title":46,"path":47,"stem":48,"icon":49},"Projects","\u002Fworkspace\u002Fprojects","2.workspace\u002F4.projects","i-lucide-folder-kanban",{"title":51,"icon":52,"path":53,"stem":54,"children":55,"page":6},"Catalogue","i-lucide-package","\u002Fcatalogue","3.catalogue",[56,61,66,71,76],{"title":57,"path":58,"stem":59,"icon":60},"Products","\u002Fcatalogue\u002Fproducts","3.catalogue\u002F1.products","i-lucide-box",{"title":62,"path":63,"stem":64,"icon":65},"Offers","\u002Fcatalogue\u002Foffers","3.catalogue\u002F2.offers","i-lucide-tag",{"title":67,"path":68,"stem":69,"icon":70},"Brands","\u002Fcatalogue\u002Fbrands","3.catalogue\u002F3.brands","i-lucide-badge-check",{"title":72,"path":73,"stem":74,"icon":75},"Merchants","\u002Fcatalogue\u002Fmerchants","3.catalogue\u002F4.merchants","i-lucide-store",{"title":77,"path":78,"stem":79,"icon":80},"Custom attributes","\u002Fcatalogue\u002Fcustom-attributes","3.catalogue\u002F5.custom-attributes","i-lucide-list-plus",{"title":82,"icon":83,"path":84,"stem":85,"children":86,"page":6},"Scraping","i-lucide-scan-search","\u002Fscraping","4.scraping",[87,92,97,102,107],{"title":88,"path":89,"stem":90,"icon":91},"Connect Scrape Admin","\u002Fscraping\u002Fconnect-scrape-admin","4.scraping\u002F1.connect-scrape-admin","i-lucide-plug",{"title":93,"path":94,"stem":95,"icon":96},"Scrape profiles","\u002Fscraping\u002Fscrape-profiles","4.scraping\u002F2.scrape-profiles","i-lucide-scan-text",{"title":98,"path":99,"stem":100,"icon":101},"Schedules and configuration","\u002Fscraping\u002Fschedules-and-configuration","4.scraping\u002F3.schedules-and-configuration","i-lucide-sliders-horizontal",{"title":103,"path":104,"stem":105,"icon":106},"Sync and reconcile","\u002Fscraping\u002Fsync-and-reconcile","4.scraping\u002F4.sync-and-reconcile","i-lucide-refresh-cw",{"title":108,"path":109,"stem":110,"icon":111},"Webhooks","\u002Fscraping\u002Fwebhooks","4.scraping\u002F5.webhooks","i-lucide-webhook",{"title":113,"icon":114,"path":115,"stem":116,"children":117,"page":6},"Growing the catalogue","i-lucide-sprout","\u002Fgrowing-the-catalogue","5.growing-the-catalogue",[118,123,128],{"title":119,"path":120,"stem":121,"icon":122},"Imports","\u002Fgrowing-the-catalogue\u002Fimports","5.growing-the-catalogue\u002F1.imports","i-lucide-import",{"title":124,"path":125,"stem":126,"icon":127},"Repair queues","\u002Fgrowing-the-catalogue\u002Frepair-queues","5.growing-the-catalogue\u002F2.repair-queues","i-lucide-wrench",{"title":129,"path":130,"stem":131,"icon":132},"Wrong URL flow","\u002Fgrowing-the-catalogue\u002Fwrong-url-flow","5.growing-the-catalogue\u002F3.wrong-url-flow","i-lucide-route",{"title":134,"icon":135,"path":136,"stem":137,"children":138,"page":6},"Publishing","i-lucide-globe","\u002Fpublishing","6.publishing",[139,143,148,153],{"title":140,"path":141,"stem":142,"icon":135},"Websites","\u002Fpublishing\u002Fwebsites","6.publishing\u002F1.websites",{"title":144,"path":145,"stem":146,"icon":147},"Website content","\u002Fpublishing\u002Fwebsite-content","6.publishing\u002F2.website-content","i-lucide-languages",{"title":149,"path":150,"stem":151,"icon":152},"SEO templates","\u002Fpublishing\u002Fseo-templates","6.publishing\u002F3.seo-templates","i-lucide-search",{"title":154,"path":155,"stem":156,"icon":157},"Analytics","\u002Fpublishing\u002Fanalytics","6.publishing\u002F4.analytics","i-lucide-chart-line",{"title":159,"icon":160,"path":161,"stem":162,"children":163,"page":6},"Developers","i-lucide-code","\u002Fdevelopers","7.developers",[164,169,173],{"title":165,"path":166,"stem":167,"icon":168},"Public API","\u002Fdevelopers\u002Fpublic-api","7.developers\u002F1.public-api","i-lucide-code-xml",{"title":170,"path":171,"stem":172,"icon":52},"Listings client","\u002Fdevelopers\u002Flistings-client","7.developers\u002F2.listings-client",{"title":174,"path":175,"stem":176,"icon":177},"Click tracking","\u002Fdevelopers\u002Fclick-tracking","7.developers\u002F3.click-tracking","i-lucide-mouse-pointer-click",{"id":179,"title":88,"body":180,"description":405,"extension":406,"links":407,"meta":408,"navigation":409,"path":89,"seo":410,"stem":90,"__hash__":412},"docs\u002F4.scraping\u002F1.connect-scrape-admin.md",{"type":181,"value":182,"toc":390},"minimark",[183,192,204,211,216,266,270,296,299,329,334,338,344,348,351,371],[184,185,186,187,191],"p",{},"Prices are collected by Scrape Admin, an external scraping service. The platform sends it the profiles, merchants and offers to scrape, and Scrape Admin sends the results back by ",[188,189,190],"a",{"href":109},"webhook",". A project is connected to exactly one Scrape Admin team. Without the connection you can still manage the catalogue, but nothing is scraped, and profiles stay local to the project.",[184,193,194,195,199,200,203],{},"The connection is configured in ",[196,197,198],"strong",{},"Settings",", on the ",[196,201,202],{},"Scrape Admin"," tab. Everyone on the project can see its status, but only owners and admins can change it.",[184,205,206],{},[207,208],"img",{"alt":209,"src":210},"The Scrape Admin settings tab before connecting","\u002Fscreenshots\u002Fsettings-scrape-admin.png",[212,213,215],"h2",{"id":214},"connect-a-project","Connect a project",[217,218,219,224,232,236,249,253,259,263],"steps",{},[220,221,223],"h3",{"id":222},"create-a-team-api-key-in-scrape-admin","Create a team API key in Scrape Admin",[184,225,226,227,231],{},"You need an owner or admin key of the Scrape Admin team. These keys start with ",[228,229,230],"code",{},"sa_",".",[220,233,235],{"id":234},"paste-the-key","Paste the key",[184,237,238,239,241,242,244,245,248],{},"Open ",[196,240,198],{},", then ",[196,243,202],{},". Paste the key under ",[196,246,247],{},"Team API key",". The eye icon shows or hides what you type.",[220,250,252],{"id":251},"set-a-base-url-if-needed","Set a base URL if needed",[184,254,255,258],{},[196,256,257],{},"Base URL"," is optional. Leave it empty to use the platform's default Scrape Admin address, which is shown below the field.",[220,260,262],{"id":261},"click-connect","Click Connect",[184,264,265],{},"The key is stored encrypted and cannot be viewed again. Only its last four characters are shown afterwards.",[212,267,269],{"id":268},"the-connection-card","The connection card",[184,271,272,273,276,277,280,281,283,284,287,288,291,292,295],{},"Once connected, the card shows the ",[196,274,275],{},"API key"," (masked, with its role), the ",[196,278,279],{},"Team"," id, the ",[196,282,257],{}," (marked \"platform default\" when not overridden), when it was ",[196,285,286],{},"Connected"," and when it was ",[196,289,290],{},"Last checked",". If the last check failed, a ",[196,293,294],{},"Last check failed"," warning shows the error.",[184,297,298],{},"Three buttons manage the connection:",[300,301,302,309,323],"ul",{},[303,304,305,308],"li",{},[196,306,307],{},"Test connection"," checks the key against Scrape Admin and reports the team name with the number of collections and profiles it can see, or the error.",[303,310,311,314,315,318,319,322],{},[196,312,313],{},"Replace key"," lets you enter a new key and base URL. Click ",[196,316,317],{},"Save new key"," to store them or ",[196,320,321],{},"Cancel"," to keep the old one.",[303,324,325,328],{},[196,326,327],{},"Disconnect"," deletes the stored key. Collections and entries in Scrape Admin are left alone, and reconnecting the same team resumes syncing.",[184,330,331,332,231],{},"After connecting, run a full sync to push existing profiles, merchants and offers, see ",[188,333,103],{"href":104},[212,335,337],{"id":336},"webhook-secret","Webhook secret",[184,339,340,341,343],{},"Every project has its own webhook secret, generated when the project is created. Scrape Admin sends it as a bearer token with every result, and the platform rejects results that do not carry it, see ",[188,342,108],{"href":109},". The secret is never shown in the interface, and the platform pushes it to the Scrape Admin entries when it syncs them.",[220,345,347],{"id":346},"rotation","Rotation",[184,349,350],{},"Rotating replaces the secret with a new one and re-syncs the entries so that they send the new token. The previous secret keeps working for 24 hours, so results that are already on their way are still accepted. After that, only the new secret is accepted.",[352,353,354,355,358,359,362,363,366,367,370],"note",{},"Rotation is available to project admins through the API route ",[228,356,357],{},"POST \u002Fapi\u002Fteams\u002F{teamId}\u002Fprojects\u002F{projectId}\u002Fscrape-admin\u002Frotate-webhook-secret",". There is no button for it in the interface yet. The call returns the new secret once and re-syncs the entries page by page: repeat it with the returned ",[228,360,361],{},"nextCursor"," as ",[228,364,365],{},"cursor"," until ",[228,368,369],{},"done"," is true.",[184,372,373,374,377,378,381,382,385,386,389],{},"If results suddenly show up as ",[196,375,376],{},"Bad secret"," in an offer's delivery log, the entry in Scrape Admin still has an old token. Use ",[196,379,380],{},"Push all offers"," with ",[196,383,384],{},"Force"," on the ",[196,387,388],{},"Sync"," tab to send every entry again with the current secret.",{"title":391,"searchDepth":392,"depth":392,"links":393},"",2,[394,401,402],{"id":214,"depth":392,"text":215,"children":395},[396,398,399,400],{"id":222,"depth":397,"text":223},3,{"id":234,"depth":397,"text":235},{"id":251,"depth":397,"text":252},{"id":261,"depth":397,"text":262},{"id":268,"depth":392,"text":269},{"id":336,"depth":392,"text":337,"children":403},[404],{"id":346,"depth":397,"text":347},"Bind a project to a Scrape Admin team with an API key, test the connection and manage the webhook secret.","md",null,{},{"icon":91},{"title":88,"description":411},"How to connect a project to Scrape Admin with a team API key, test and replace the key, disconnect, and how the webhook secret and its rotation grace period work.","AN6XHAMo3lLxUKkWCqe7jRBv9pfZJMexYViaSO2wCbc",[414,416],{"title":77,"path":78,"stem":79,"description":415,"icon":80,"children":-1},"Define typed custom fields for products, brands, merchants and offers, and let scrapes fill them.",{"title":93,"path":94,"stem":95,"description":417,"icon":96,"children":-1},"Create, test, validate, import, export and sync the profiles that describe how a shop's product pages are read.",1792430223305]