[{"data":1,"prerenderedAt":2355},["ShallowReactive",2],{"docs-tree-navigation":3,"docs-sidebar-pages":65,"docs-page":2304},{"id":4,"extension":5,"groups":6,"meta":46,"stem":63,"__hash__":64},"navigation\u002Fdocs\u002Fusers\u002F_nav.yml","yml",[7,12,20,27,33,40],{"group":8,"items":9},"Getting started",[10,11],"quickstart","how-trawley-works",{"group":13,"items":14},"Building scrapers",[15,16,17,18,19],"the-setup-wizard","choosing-fields","pagination","nested-pages","preview-and-validate",{"group":21,"items":22},"Running & scheduling",[23,24,25,26],"running-a-scrape","scheduling","job-logs-and-status","the-doctor",{"group":28,"items":29},"Working with results",[30,31,32],"viewing-results","searching-results","exporting",{"group":34,"items":35},"Scraper settings",[36,37,38,39],"browser-settings","proxies","warnings","transfer-between-teams",{"group":41,"items":42},"Teams & billing",[43,44,45],"teams-and-members","billing-and-plans","account-settings",{"path":47,"body":48,"title":62},"\u002Fdocs\u002Fusers\u002F_nav",{"groups":49},[50,52,54,56,58,60],{"group":8,"items":51},[10,11],{"group":13,"items":53},[15,16,17,18,19],{"group":21,"items":55},[23,24,25,26],{"group":28,"items":57},[30,31,32],{"group":34,"items":59},[36,37,38,39],{"group":41,"items":61},[43,44,45],"Nav","docs\u002Fusers\u002F_nav","MGrqgLdfDFyiffSUqKlXMNDG_l7x9VdAfQq0U861oxk",[66,270,377,495,586,757,852,972,1072,1138,1217,1309,1378,1468,1602,1690,1768,1862,1941,2066,2137,2214],{"id":67,"title":68,"badge":69,"body":70,"description":258,"extension":259,"group":260,"icon":69,"lastUpdated":69,"meta":261,"navigation":262,"order":263,"path":264,"popular":265,"publishedAt":69,"seo":266,"sidebarTitle":69,"stem":267,"tree":268,"__hash__":269},"docs\u002Fdocs\u002Fusers\u002F_component-test.md","Component test",null,{"type":71,"value":72,"toc":248},"minimal",[73,82,87,106,110,117,123,129,135,139,154,158,171,175,181,185,237,241,244],[74,75,76,77,81],"p",{},"This page is not linked from any user-facing surface; it exists so the\nU8 smoke check can verify every Mintlify-style MDC component renders\nwithout prerender errors. Not listed in ",[78,79,80],"code",{},"_nav.yml",".",[83,84,86],"h2",{"id":85},"card-cardgroup","Card \u002F CardGroup",[88,89,91,99],"card-group",{"cols":90},2,[92,93,96],"card",{"icon":94,"title":95},"rocket","One",[74,97,98],{},"Linkable card with icon.",[92,100,103],{"icon":101,"title":102},"code-2","Two",[74,104,105],{},"Plain card.",[83,107,109],{"id":108},"callouts","Callouts",[111,112,114],"callout",{"type":113},"note",[74,115,116],{},"Neutral callout.",[111,118,120],{"type":119},"tip",[74,121,122],{},"Brand-tinted tip callout.",[111,124,126],{"type":125},"info",[74,127,128],{},"Info callout.",[111,130,132],{"type":131},"warning",[74,133,134],{},"Signal-orange warning callout.",[83,136,138],{"id":137},"steps","Steps",[137,140,141,148],{},[142,143,145],"step",{"title":144},"First step",[74,146,147],{},"Initial action.",[142,149,151],{"title":150},"Second step",[74,152,153],{},"Follow-up.",[83,155,157],{"id":156},"tabs","Tabs",[156,159,160,166],{},[161,162,163],"tab",{"title":95},[74,164,165],{},"Tab content one.",[161,167,168],{"title":102},[74,169,170],{},"Tab content two.",[83,172,174],{"id":173},"accordion","Accordion",[173,176,178],{"title":177},"Click me",[74,179,180],{},"Hidden content.",[83,182,184],{"id":183},"code-group","Code group",[183,186,187,210],{},[188,189,195],"pre",{"className":190,"code":191,"filename":192,"language":193,"meta":194,"style":194},"language-bash shiki shiki-themes github-light","echo hello\n","cURL","bash","",[78,196,197],{"__ignoreMap":194},[198,199,202,206],"span",{"class":200,"line":201},"line",1,[198,203,205],{"class":204},"sYu0t","echo",[198,207,209],{"class":208},"sYBdl"," hello\n",[188,211,216],{"className":212,"code":213,"filename":214,"language":215,"meta":194,"style":194},"language-js shiki shiki-themes github-light","console.log('hello')\n","JavaScript","js",[78,217,218],{"__ignoreMap":194},[198,219,220,224,228,231,234],{"class":200,"line":201},[198,221,223],{"class":222},"sgsFI","console.",[198,225,227],{"class":226},"s7eDp","log",[198,229,230],{"class":222},"(",[198,232,233],{"class":208},"'hello'",[198,235,236],{"class":222},")\n",[83,238,240],{"id":239},"frame","Frame",[74,242,243],{},"Plain text inside a frame wrapper.",[245,246,247],"style",{},"html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}",{"title":194,"searchDepth":249,"depth":249,"links":250},3,[251,252,253,254,255,256,257],{"id":85,"depth":90,"text":86},{"id":108,"depth":90,"text":109},{"id":137,"depth":90,"text":138},{"id":156,"depth":90,"text":157},{"id":173,"depth":90,"text":174},{"id":183,"depth":90,"text":184},{"id":239,"depth":90,"text":240},"Hidden page exercising every MDC component for smoke verification.","md","Internal",{},true,99,"\u002Fdocs\u002Fusers\u002F_component-test",false,{"title":68,"description":258},"docs\u002Fusers\u002F_component-test","users","_XBmpaGp6vajTdRUIFi0_INET42PVazx43zYgAuhQCw",{"id":271,"title":272,"badge":69,"body":273,"description":370,"extension":259,"group":41,"icon":371,"lastUpdated":69,"meta":372,"navigation":262,"order":249,"path":373,"popular":265,"publishedAt":69,"seo":374,"sidebarTitle":69,"stem":375,"tree":268,"__hash__":376},"docs\u002Fdocs\u002Fusers\u002Faccount-settings.md","Account settings",{"type":71,"value":274,"toc":364},[275,284,288,311,317,321,324,329,333,345,349],[74,276,277,278,283],{},"Your account is you as a person: your name, your email, and your password. It is\nseparate from ",[279,280,282],"a",{"href":281},"\u002Fdocs\u002Fusers\u002Fteams-and-members","teams",", which own scrapers and\nbilling. One account can belong to many teams.",[83,285,287],{"id":286},"what-you-can-manage","What you can manage",[289,290,291,299,305],"ul",{},[292,293,294,298],"li",{},[295,296,297],"strong",{},"Profile."," Your name and personal details.",[292,300,301,304],{},[295,302,303],{},"Email address."," The address you sign in with and receive notifications at.",[292,306,307,310],{},[295,308,309],{},"Password."," Your sign-in credentials.",[74,312,313],{},[314,315],"img",{"alt":272,"src":316},"\u002Fdocs\u002Fusers\u002Faccount-settings.png",[83,318,320],{"id":319},"changing-your-email","Changing your email",[74,322,323],{},"When you change your email address, Trawley sends a verification step to confirm\nthe new address belongs to you before the change takes effect. This keeps your\naccount secure if someone else ever gets access to a session.",[111,325,326],{"type":119},[74,327,328],{},"Use an email you will keep access to long term, especially if you are the\nadministrator for a team's billing. Account recovery and important notices go to\nthis address.",[83,330,332],{"id":331},"account-vs-team","Account vs team",[74,334,335,336,340,341,344],{},"If you are looking for plan limits, invoices, or members, those live in\n",[279,337,339],{"href":338},"\u002Fdocs\u002Fusers\u002Fbilling-and-plans","billing and plans"," and\n",[279,342,343],{"href":281},"teams and members",", not here. Account settings are\njust about you.",[83,346,348],{"id":347},"whats-next","What's next",[88,350,351,357],{"cols":90},[92,352,354],{"href":281,"icon":268,"title":353},"Teams & members",[74,355,356],{},"Manage the teams you belong to.",[92,358,361],{"href":338,"icon":359,"title":360},"gauge","Billing & plans",[74,362,363],{},"Plans, usage, and invoices.",{"title":194,"searchDepth":249,"depth":249,"links":365},[366,367,368,369],{"id":286,"depth":90,"text":287},{"id":319,"depth":90,"text":320},{"id":331,"depth":90,"text":332},{"id":347,"depth":90,"text":348},"Manage your personal profile, email, and password.","settings",{},"\u002Fdocs\u002Fusers\u002Faccount-settings",{"title":272,"description":370},"docs\u002Fusers\u002Faccount-settings","9ZDMdFUiCaQ3x4AOn4JJKzRfm34-UxhKQClZ9gnx75Y",{"id":378,"title":360,"badge":69,"body":379,"description":490,"extension":259,"group":41,"icon":359,"lastUpdated":69,"meta":491,"navigation":262,"order":90,"path":338,"popular":265,"publishedAt":69,"seo":492,"sidebarTitle":69,"stem":493,"tree":268,"__hash__":494},"docs\u002Fdocs\u002Fusers\u002Fbilling-and-plans.md",{"type":71,"value":380,"toc":483},[381,388,392,395,415,418,424,428,436,440,443,452,456,467,469],[74,382,383,384,387],{},"Billing happens at the ",[279,385,386],{"href":281},"team"," level. A team is on a\nplan, and that plan sets how much you can do each month.",[83,389,391],{"id":390},"what-a-plan-covers","What a plan covers",[74,393,394],{},"Plans include monthly allowances for the work Trawley does, such as:",[289,396,397,403,409],{},[292,398,399,402],{},[295,400,401],{},"Scrape runs"," that collect data from sites.",[292,404,405,408],{},[295,406,407],{},"Search API calls"," when you query results from your own apps.",[292,410,411,414],{},[295,412,413],{},"Results API calls"," when you read results programmatically.",[74,416,417],{},"When you reach an allowance, that activity pauses until the next billing period or\nuntil you upgrade. Searching from the dashboard and building scrapers are part of\nnormal use; the metered allowances mainly affect heavy or programmatic usage.",[74,419,420],{},[314,421],{"alt":422,"src":423},"A team's plan and usage","\u002Fdocs\u002Fusers\u002Fbilling-and-plans.png",[83,425,427],{"id":426},"seeing-your-usage","Seeing your usage",[74,429,430,431,435],{},"A team's billing area shows your current plan and how much of each allowance you\nhave used this period. Check it if a ",[279,432,434],{"href":433},"\u002Fdocs\u002Fusers\u002Fscheduling","scheduled run"," stops\nhappening or an API call returns a limit error, since you may have reached an\nallowance.",[83,437,439],{"id":438},"upgrading-and-managing-billing","Upgrading and managing billing",[74,441,442],{},"Upgrades and payment details are handled through a secure billing portal. From\nthere you can change plan, update your card, and view invoices.",[111,444,445],{"type":119},[74,446,447,448,451],{},"If you mostly hit limits from frequent ",[279,449,450],{"href":433},"schedules",",\nslowing a scraper's cadence can be cheaper than upgrading. Match each scraper's\nschedule to how often its source actually changes.",[83,453,455],{"id":454},"for-developers","For developers",[74,457,458,459,462,463,81],{},"API allowances and what a ",[78,460,461],{},"429"," looks like are covered in\n",[279,464,466],{"href":465},"\u002Fdocs\u002Fdevelopers\u002Frate-limits-and-quotas","rate limits and quotas",[83,468,348],{"id":347},[88,470,471,478],{"cols":90},[92,472,475],{"href":433,"icon":473,"title":474},"zap","Scheduling",[74,476,477],{},"Balance freshness against usage.",[92,479,480],{"href":373,"icon":371,"title":272},[74,481,482],{},"Manage your personal account.",{"title":194,"searchDepth":249,"depth":249,"links":484},[485,486,487,488,489],{"id":390,"depth":90,"text":391},{"id":426,"depth":90,"text":427},{"id":438,"depth":90,"text":439},{"id":454,"depth":90,"text":455},{"id":347,"depth":90,"text":348},"How plans, usage limits, and billing work for a team.",{},{"title":360,"description":490},"docs\u002Fusers\u002Fbilling-and-plans","OHmAtqwaFa1-1r--VainTnxIvGas-silRO118y-zqsk",{"id":496,"title":497,"badge":69,"body":498,"description":579,"extension":259,"group":34,"icon":580,"lastUpdated":69,"meta":581,"navigation":262,"order":201,"path":582,"popular":265,"publishedAt":69,"seo":583,"sidebarTitle":69,"stem":584,"tree":268,"__hash__":585},"docs\u002Fdocs\u002Fusers\u002Fbrowser-settings.md","Browser settings",{"type":71,"value":499,"toc":574},[500,503,507,510,521,526,530,555,557],[74,501,502],{},"Trawley scrapes by loading a site in a real browser, the same way you would. A\nscraper's browser settings control how that page is loaded, which matters for\nsites that are slow, heavy, or particular about how they render.",[83,504,506],{"id":505},"when-to-adjust-them","When to adjust them",[74,508,509],{},"Most scrapers never need changes here. Reach for browser settings when a site:",[289,511,512,515,518],{},[292,513,514],{},"Loads content slowly or in stages, so the scraper grabs the page before it is\nready.",[292,516,517],{},"Behaves differently depending on how it is visited.",[292,519,520],{},"Returns empty results even though the data is clearly visible to you.",[74,522,523],{},[314,524],{"alt":497,"src":525},"\u002Fdocs\u002Fusers\u002Fbrowser-settings.png",[83,527,529],{"id":528},"a-good-order-to-try-things","A good order to try things",[137,531,532,538,544],{},[142,533,535],{"title":534},"Confirm it is a loading issue",[74,536,537],{},"If results are empty but the page looks fine in your own browser, the scraper may\nbe reading the page too early or being treated as a bot.",[142,539,541],{"title":540},"Adjust browser settings",[74,542,543],{},"Tune how the page is loaded so the content has time to appear.",[142,545,547],{"title":546},"Consider a proxy",[74,548,549,550,554],{},"If the site is actively blocking automated visits, browser settings will not\nhelp. A ",[279,551,553],{"href":552},"\u002Fdocs\u002Fusers\u002Fproxies","proxy"," is the right tool.",[83,556,348],{"id":347},[88,558,559,566],{"cols":90},[92,560,563],{"href":552,"icon":561,"title":562},"shield","Proxies",[74,564,565],{},"Get past sites that block automated traffic.",[92,567,571],{"href":568,"icon":569,"title":570},"\u002Fdocs\u002Fusers\u002Fthe-doctor","wrench","The doctor",[74,572,573],{},"Diagnose a scraper that stopped working.",{"title":194,"searchDepth":249,"depth":249,"links":575},[576,577,578],{"id":505,"depth":90,"text":506},{"id":528,"depth":90,"text":529},{"id":347,"depth":90,"text":348},"Control how Trawley loads a site when scraping it.","globe",{},"\u002Fdocs\u002Fusers\u002Fbrowser-settings",{"title":497,"description":579},"docs\u002Fusers\u002Fbrowser-settings","FUotuMsiDNfnJwlixRs9__3GkkBEfqwz7dzd6yG1CeA",{"id":587,"title":588,"badge":69,"body":589,"description":750,"extension":259,"group":13,"icon":751,"lastUpdated":69,"meta":752,"navigation":262,"order":90,"path":753,"popular":265,"publishedAt":69,"seo":754,"sidebarTitle":69,"stem":755,"tree":268,"__hash__":756},"docs\u002Fdocs\u002Fusers\u002Fchoosing-fields.md","Choosing fields",{"type":71,"value":590,"toc":744},[591,594,598,630,634,637,704,712,716,724,726],[74,592,593],{},"Fields are the pieces of data Trawley captures from each item. Choosing them well\nmakes your results easier to read, search, and filter.",[83,595,597],{"id":596},"what-makes-a-good-field","What makes a good field",[289,599,600,614,624],{},[292,601,602,605,606,609,610,613],{},[295,603,604],{},"One value per field."," Keep ",[78,607,608],{},"price"," and ",[78,611,612],{},"bedrooms"," separate rather than a\nsingle \"details\" blob. Separate fields are searchable on their own.",[292,615,616,619,620,81],{},[295,617,618],{},"Capture a stable identifier."," A link or title that uniquely identifies each\nitem lets Trawley track changes between runs and power\n",[279,621,623],{"href":622},"\u002Fdocs\u002Fdevelopers\u002Fdiff-endpoint","diffs",[292,625,626,629],{},[295,627,628],{},"Only what you need."," Every field is something to maintain. Skip data you will\nnot use.",[83,631,633],{"id":632},"data-types","Data types",[74,635,636],{},"Each field has a type. The type controls how the value is stored and, crucially,\nhow you can search it later.",[638,639,640,656],"table",{},[641,642,643],"thead",{},[644,645,646,650,653],"tr",{},[647,648,649],"th",{},"Type",[647,651,652],{},"Use for",[647,654,655],{},"Lets you",[657,658,659,671,682,693],"tbody",{},[644,660,661,665,668],{},[662,663,664],"td",{},"Text",[662,666,667],{},"Titles, descriptions, locations",[662,669,670],{},"Search by meaning and keywords",[644,672,673,676,679],{},[662,674,675],{},"Number",[662,677,678],{},"Prices, counts, sizes",[662,680,681],{},"Filter by ranges (under £500k, 3+ beds)",[644,683,684,687,690],{},[662,685,686],{},"Date",[662,688,689],{},"Listed dates, deadlines",[662,691,692],{},"Filter and sort by time",[644,694,695,698,701],{},[662,696,697],{},"Boolean",[662,699,700],{},"Yes\u002Fno flags (has parking)",[662,702,703],{},"Filter to true or false",[111,705,706],{"type":119},[74,707,708,709,711],{},"Getting number and date types right matters most. Trawley uses them to build\nexact filters during search, so \"under £500k\" only works if ",[78,710,608],{}," is a number,\nnot text. The wizard suggests types for you, but it is worth a quick check.",[83,713,715],{"id":714},"letting-the-wizard-help","Letting the wizard help",[74,717,718,719,723],{},"You do not assign types by hand from a blank slate. As you describe your fields\nin the ",[279,720,722],{"href":721},"\u002Fdocs\u002Fusers\u002Fthe-setup-wizard","setup wizard",", it proposes a sensible type\nfor each one based on the real values on the page. You confirm or correct.",[83,725,348],{"id":347},[88,727,728,736],{"cols":90},[92,729,733],{"href":730,"icon":731,"title":732},"\u002Fdocs\u002Fusers\u002Fpagination","boxes","Pagination",[74,734,735],{},"Make sure the scraper collects every page of items.",[92,737,741],{"href":738,"icon":739,"title":740},"\u002Fdocs\u002Fusers\u002Fpreview-and-validate","check","Preview and validate",[74,742,743],{},"Check field values against the real page.",{"title":194,"searchDepth":249,"depth":249,"links":745},[746,747,748,749],{"id":596,"depth":90,"text":597},{"id":632,"depth":90,"text":633},{"id":714,"depth":90,"text":715},{"id":347,"depth":90,"text":348},"Pick the right fields and data types so your results are clean and searchable.","list",{},"\u002Fdocs\u002Fusers\u002Fchoosing-fields",{"title":588,"description":750},"docs\u002Fusers\u002Fchoosing-fields","eUEQCkbcaJGvYrtaH29e-6Cww-WZD82KPpJApwhbzqo",{"id":758,"title":759,"badge":69,"body":760,"description":846,"extension":259,"group":28,"icon":835,"lastUpdated":69,"meta":847,"navigation":262,"order":249,"path":848,"popular":265,"publishedAt":69,"seo":849,"sidebarTitle":69,"stem":850,"tree":268,"__hash__":851},"docs\u002Fdocs\u002Fusers\u002Fexporting.md","Exporting",{"type":71,"value":761,"toc":840},[762,765,769,783,789,793,796,800,807,822,824],[74,763,764],{},"When you want to work with your data outside Trawley, export it. You get a single\nfile containing every result from the scraper, in the format you choose.",[83,766,768],{"id":767},"formats","Formats",[289,770,771,777],{},[292,772,773,776],{},[295,774,775],{},"CSV"," opens directly in spreadsheets like Excel or Google Sheets. Each field\nis a column.",[292,778,779,782],{},[295,780,781],{},"JSON"," is best for feeding another tool or a developer workflow.",[74,784,785],{},[314,786],{"alt":787,"src":788},"Exporting results","\u002Fdocs\u002Fusers\u002Fexporting.png",[83,790,792],{"id":791},"what-you-get","What you get",[74,794,795],{},"An export includes all of the scraper's current results, not just the page you\nare viewing. The file is named after your scraper, and the columns are your field\nnames, so it is ready to use without cleanup.",[83,797,799],{"id":798},"exporting-from-code","Exporting from code",[74,801,802,803,81],{},"Developers can trigger the same export programmatically and choose the format with\na single request. See the ",[279,804,806],{"href":805},"\u002Fdocs\u002Fdevelopers\u002Fexport-endpoint","export endpoint",[111,808,809],{"type":119},[74,810,811,812,816,817,821],{},"For a one-off analysis, export and open in a spreadsheet. If you need the data to\nstay in sync with each run, call the ",[279,813,815],{"href":814},"\u002Fdocs\u002Fdevelopers\u002Fresults-endpoint","results endpoint","\nor ",[279,818,820],{"href":819},"\u002Fdocs\u002Fdevelopers\u002Fhybrid-search","search"," from your app instead of re-exporting\nby hand.",[83,823,348],{"id":347},[88,825,826,833],{"cols":90},[92,827,830],{"href":828,"icon":820,"title":829},"\u002Fdocs\u002Fusers\u002Fsearching-results","Search instead",[74,831,832],{},"Often you want an answer, not the whole file.",[92,834,837],{"href":805,"icon":835,"title":836},"file-text","Export endpoint",[74,838,839],{},"Automate exports from your own code.",{"title":194,"searchDepth":249,"depth":249,"links":841},[842,843,844,845],{"id":767,"depth":90,"text":768},{"id":791,"depth":90,"text":792},{"id":798,"depth":90,"text":799},{"id":347,"depth":90,"text":348},"Download your results as CSV or JSON.",{},"\u002Fdocs\u002Fusers\u002Fexporting",{"title":759,"description":846},"docs\u002Fusers\u002Fexporting","6gwXcuJea-kri41S3ZGKTAmBQLZ3f0VjKRuBRAz105s",{"id":853,"title":854,"badge":69,"body":855,"description":965,"extension":259,"group":8,"icon":966,"lastUpdated":69,"meta":967,"navigation":262,"order":90,"path":968,"popular":265,"publishedAt":69,"seo":969,"sidebarTitle":69,"stem":970,"tree":268,"__hash__":971},"docs\u002Fdocs\u002Fusers\u002Fhow-trawley-works.md","How Trawley works",{"type":71,"value":856,"toc":956},[857,860,864,874,879,883,898,902,907,911,916,919,925,929,937,939],[74,858,859],{},"Trawley has a small vocabulary. Learn these five words and the rest of the\nproduct makes sense.",[83,861,863],{"id":862},"scraper","Scraper",[74,865,866,867,869,870,873],{},"A ",[295,868,862],{}," points at a website and extracts a ",[295,871,872],{},"list of items"," from it, for\nexample every property on a listings page or every product in a catalogue. A\nscraper is the thing you build once and reuse.",[111,875,876],{"type":125},[74,877,878],{},"Every Trawley scraper works on lists. You give it a page that shows many items,\nand it captures each one as a record.",[83,880,882],{"id":881},"field","Field",[74,884,866,885,887,888,890,891,893,894,897],{},[295,886,881],{}," is a single piece of data you want from each item, like ",[78,889,608],{},",\n",[78,892,612],{},", or ",[78,895,896],{},"location",". You choose the fields when you build the scraper, and\nthe wizard helps you map them to the right part of the page.",[83,899,901],{"id":900},"job","Job",[74,903,866,904,906],{},[295,905,900],{}," is one run of a scraper. Each time the scraper collects data, whether\nyou run it by hand or on a schedule, that is a job. Jobs move through a simple\nlifecycle: pending, running, then completed or failed.",[83,908,910],{"id":909},"result","Result",[74,912,866,913,915],{},[295,914,909],{}," is one item the scraper captured during a job, with a value for each\nfield. A run over a listings page produces one result per listing.",[83,917,918],{"id":386},"Team",[74,920,921,922,924],{},"Your scrapers belong to a ",[295,923,386],{},". Teams let you share scrapers and collaborate,\nand they are where billing and plan limits live. You can belong to more than one\nteam and switch between them.",[83,926,928],{"id":927},"how-they-fit-together","How they fit together",[188,930,935],{"className":931,"code":933,"language":934},[932],"language-text","Team\n └── Scraper (points at a site, defines fields)\n       └── Job (one run)\n             └── Result (one captured item, with field values)\n","text",[78,936,933],{"__ignoreMap":194},[83,938,348],{"id":347},[88,940,941,948],{"cols":90},[92,942,945],{"href":721,"icon":943,"title":944},"wand-2","Build your first scraper",[74,946,947],{},"Use the wizard to define a scraper by chatting.",[92,949,953],{"href":950,"icon":951,"title":952},"\u002Fdocs\u002Fusers\u002Frunning-a-scrape","play","Run and schedule",[74,954,955],{},"Run a scraper and keep it up to date automatically.",{"title":194,"searchDepth":249,"depth":249,"links":957},[958,959,960,961,962,963,964],{"id":862,"depth":90,"text":863},{"id":881,"depth":90,"text":882},{"id":900,"depth":90,"text":901},{"id":909,"depth":90,"text":910},{"id":386,"depth":90,"text":918},{"id":927,"depth":90,"text":928},{"id":347,"depth":90,"text":348},"The handful of ideas behind scrapers, fields, jobs, and results.","lightbulb",{},"\u002Fdocs\u002Fusers\u002Fhow-trawley-works",{"title":854,"description":965},"docs\u002Fusers\u002Fhow-trawley-works","rREpSmgZSQU5fPrEUHLHwgtyxJFcaGAZQg77XuiuvVU",{"id":973,"title":974,"badge":69,"body":975,"description":1065,"extension":259,"group":21,"icon":1066,"lastUpdated":69,"meta":1067,"navigation":262,"order":249,"path":1068,"popular":265,"publishedAt":69,"seo":1069,"sidebarTitle":69,"stem":1070,"tree":268,"__hash__":1071},"docs\u002Fdocs\u002Fusers\u002Fjob-logs-and-status.md","Job logs & status",{"type":71,"value":976,"toc":1059},[977,980,984,987,993,996,1000,1003,1030,1034,1037,1042,1044],[74,978,979],{},"Every run keeps a record. The job's status tells you the outcome, and its logs\ntell you the story of what happened along the way.",[83,981,983],{"id":982},"reading-a-job","Reading a job",[74,985,986],{},"Open a job from a scraper's run history to see its status and logs.",[74,988,989],{},[314,990],{"alt":991,"src":992},"A job's logs","\u002Fdocs\u002Fusers\u002Fjob-logs-and-status.png",[74,994,995],{},"The logs show the steps the run took: the pages it visited, the items it\ncaptured, and any problems it hit. When a run does not produce what you expected,\nthe logs are the first place to look.",[83,997,999],{"id":998},"when-a-job-fails","When a job fails",[74,1001,1002],{},"A failed job usually points at one of a few causes:",[289,1004,1005,1015,1024],{},[292,1006,1007,1010,1011,1014],{},[295,1008,1009],{},"The site changed."," The page layout moved and the scraper's mapping no longer\nmatches. The ",[279,1012,1013],{"href":568},"doctor"," is built for this.",[292,1016,1017,1020,1021,1023],{},[295,1018,1019],{},"The site blocked the request."," Some sites refuse automated visits. Trying a\n",[279,1022,553],{"href":552}," often gets past this.",[292,1025,1026,1029],{},[295,1027,1028],{},"A temporary glitch."," The site was briefly down or slow.",[83,1031,1033],{"id":1032},"retrying","Retrying",[74,1035,1036],{},"For a transient failure, retry the run. If you suspect the site blocked Trawley,\nthere is also an option to retry without a proxy (or with one), so you can quickly\ntest whether the proxy was the issue.",[111,1038,1039],{"type":119},[74,1040,1041],{},"If the same job fails repeatedly in the same way, stop retrying and run the\ndoctor instead. Repeated identical failures mean something needs fixing, not\nanother attempt.",[83,1043,348],{"id":347},[88,1045,1046,1051],{"cols":90},[92,1047,1048],{"href":568,"icon":569,"title":570},[74,1049,1050],{},"Diagnose and repair a broken scraper.",[92,1052,1056],{"href":1053,"icon":1054,"title":1055},"\u002Fdocs\u002Fusers\u002Fwarnings","flag","Warnings",[74,1057,1058],{},"Catch problems before they fail a run.",{"title":194,"searchDepth":249,"depth":249,"links":1060},[1061,1062,1063,1064],{"id":982,"depth":90,"text":983},{"id":998,"depth":90,"text":999},{"id":1032,"depth":90,"text":1033},{"id":347,"depth":90,"text":348},"See what a run did, and retry one that failed.","terminal",{},"\u002Fdocs\u002Fusers\u002Fjob-logs-and-status",{"title":974,"description":1065},"docs\u002Fusers\u002Fjob-logs-and-status","uzce5Tj18ZAg61T3kXndRvwlR88jM8pBBQQLSwgCXqU",{"id":1073,"title":1074,"badge":69,"body":1075,"description":1130,"extension":259,"group":13,"icon":1131,"lastUpdated":69,"meta":1132,"navigation":262,"order":1133,"path":1134,"popular":265,"publishedAt":69,"seo":1135,"sidebarTitle":69,"stem":1136,"tree":268,"__hash__":1137},"docs\u002Fdocs\u002Fusers\u002Fnested-pages.md","Nested pages",{"type":71,"value":1076,"toc":1124},[1077,1080,1084,1087,1091,1094,1098,1104,1109,1111],[74,1078,1079],{},"A listing page often shows a summary of each item, while the full detail lives on\nthe item's own page. Nested scraping follows the link for each item and pulls\nfields from that detail page too.",[83,1081,1083],{"id":1082},"when-you-need-it","When you need it",[74,1085,1086],{},"Use nested pages when the data you want is not on the list. For example, a\nproperty listings page might show price and address, but bedrooms, floor area,\nand the full description only appear when you open a specific listing.",[83,1088,1090],{"id":1089},"how-it-works","How it works",[74,1092,1093],{},"When the assistant detects that each item links to its own page, it can open\nthose pages and suggest extra fields from them. Your scraper then captures both\nthe list-level fields and the detail-page fields for every item.",[83,1095,1097],{"id":1096},"setting-it-up","Setting it up",[74,1099,1100,1101,1103],{},"In the ",[279,1102,722],{"href":721},", tell the assistant which\nfields come from the detail page: \"open each listing and also grab the floor area\nand the full description.\" It analyses an item's page and proposes those fields,\ntesting them against the real page like any other field.",[111,1105,1106],{"type":131},[74,1107,1108],{},"Nested scraping visits one extra page per item, so runs take longer and use more\nof your plan's allowance than a list-only scraper. Only add detail-page fields\nyou actually need.",[83,1110,348],{"id":347},[88,1112,1113,1118],{"cols":90},[92,1114,1115],{"href":738,"icon":739,"title":740},[74,1116,1117],{},"Check that detail-page fields populate correctly.",[92,1119,1121],{"href":950,"icon":951,"title":1120},"Running a scrape",[74,1122,1123],{},"Run the scraper and watch the job complete.",{"title":194,"searchDepth":249,"depth":249,"links":1125},[1126,1127,1128,1129],{"id":1082,"depth":90,"text":1083},{"id":1089,"depth":90,"text":1090},{"id":1096,"depth":90,"text":1097},{"id":347,"depth":90,"text":348},"Capture extra detail from each item's own page, not just the list.","link",{},4,"\u002Fdocs\u002Fusers\u002Fnested-pages",{"title":1074,"description":1130},"docs\u002Fusers\u002Fnested-pages","-82qKdlDDPuvcdEUs45N1epd2Ek49ak4yWzGAAZv1lQ",{"id":1139,"title":732,"badge":69,"body":1140,"description":1212,"extension":259,"group":13,"icon":731,"lastUpdated":69,"meta":1213,"navigation":262,"order":249,"path":730,"popular":265,"publishedAt":69,"seo":1214,"sidebarTitle":69,"stem":1215,"tree":268,"__hash__":1216},"docs\u002Fdocs\u002Fusers\u002Fpagination.md",{"type":71,"value":1141,"toc":1206},[1142,1145,1149,1152,1172,1174,1180,1185,1189,1192,1194],[74,1143,1144],{},"Most listing pages show items in batches. Pagination is how Trawley moves through\nall of them so your scraper captures the full set, not just what is on the first\nscreen.",[83,1146,1148],{"id":1147},"how-sites-paginate","How sites paginate",[74,1150,1151],{},"Trawley handles the common patterns:",[289,1153,1154,1160,1166],{},[292,1155,1156,1159],{},[295,1157,1158],{},"Next button."," The site has a \"Next\" or numbered page links. Trawley clicks\nthrough them.",[292,1161,1162,1165],{},[295,1163,1164],{},"Load more."," A \"Load more\" button reveals additional items each time it is\nclicked. Trawley keeps clicking until there are no more.",[292,1167,1168,1171],{},[295,1169,1170],{},"Infinite scroll."," New items load as you scroll down. Trawley scrolls to pull\nthem in.",[83,1173,1097],{"id":1096},[74,1175,1176,1177,1179],{},"You do not need to know which pattern a site uses. During the\n",[279,1178,722],{"href":721},", the assistant checks the page for\npagination and tells you what it found. If it detects a \"Next\" button or a\n\"Load more\" control, it configures the scraper to follow it.",[111,1181,1182],{"type":119},[74,1183,1184],{},"If the assistant misses pagination, point it out: \"there's a Load more button at\nthe bottom\" or \"results continue on page 2\". It will re-check and wire it up.",[83,1186,1188],{"id":1187},"why-it-matters","Why it matters",[74,1190,1191],{},"Pagination decides how complete your data is. A scraper that only reads the first\npage silently misses everything after it. It is worth confirming during setup\nthat the preview includes items you know appear further down.",[83,1193,348],{"id":347},[88,1195,1196,1201],{"cols":90},[92,1197,1198],{"href":1134,"icon":1131,"title":1074},[74,1199,1200],{},"Capture extra detail from each item's own page.",[92,1202,1203],{"href":738,"icon":739,"title":740},[74,1204,1205],{},"Confirm the scraper reaches every item.",{"title":194,"searchDepth":249,"depth":249,"links":1207},[1208,1209,1210,1211],{"id":1147,"depth":90,"text":1148},{"id":1096,"depth":90,"text":1097},{"id":1187,"depth":90,"text":1188},{"id":347,"depth":90,"text":348},"Collect every page of items, not just the first.",{},{"title":732,"description":1212},"docs\u002Fusers\u002Fpagination","x4jhEEIiZUM8HQfCbJ1FiohQZERPUU0tAT48cUEexCo",{"id":1218,"title":740,"badge":69,"body":1219,"description":1303,"extension":259,"group":13,"icon":739,"lastUpdated":69,"meta":1304,"navigation":262,"order":1305,"path":738,"popular":265,"publishedAt":69,"seo":1306,"sidebarTitle":69,"stem":1307,"tree":268,"__hash__":1308},"docs\u002Fdocs\u002Fusers\u002Fpreview-and-validate.md",{"type":71,"value":1220,"toc":1297},[1221,1224,1228,1231,1235,1269,1273,1276,1281,1283],[74,1222,1223],{},"Before you save a scraper, Trawley shows you a preview of the data it would\ncapture from the real page. Validating here is the difference between a scraper\nthat just works and one you have to fix after its first run.",[83,1225,1227],{"id":1226},"the-preview","The preview",[74,1229,1230],{},"As you build, the assistant pulls a sample of real results and shows them with\nyour fields as columns. You see actual values, not placeholders, so you can spot\nproblems immediately.",[83,1232,1234],{"id":1233},"what-to-check","What to check",[137,1236,1237,1243,1253,1259],{},[142,1238,1240],{"title":1239},"Every field has a value",[74,1241,1242],{},"Scan for empty columns. A field that is blank across the preview is mapped to the\nwrong place. Tell the assistant and it will re-map it.",[142,1244,1246],{"title":1245},"Values look right",[74,1247,1248,1249,1252],{},"Check that prices are numbers, dates are dates, and text is the intended text.\nA price showing ",[78,1250,1251],{},"Offers over £400,000"," may need cleaning to a plain number.",[142,1254,1256],{"title":1255},"The right number of items",[74,1257,1258],{},"If the page shows 24 listings and the preview has 12, pagination or the item\nselector needs attention.",[142,1260,1262],{"title":1261},"Detail fields populate",[74,1263,1264,1265,1268],{},"If you added ",[279,1266,1267],{"href":1134},"nested page"," fields, confirm they are\nfilled in, not empty.",[83,1270,1272],{"id":1271},"fixing-problems","Fixing problems",[74,1274,1275],{},"Every problem is fixed by describing it in the chat. \"The bedrooms field is\nempty\", \"only the first page is showing\", or \"the price includes the currency\nsymbol\" all give the assistant enough to correct the configuration and refresh\nthe preview.",[111,1277,1278],{"type":119},[74,1279,1280],{},"Validate against an item you know well. Pick a listing you can open yourself,\nthen confirm Trawley captured the same values you see.",[83,1282,348],{"id":347},[88,1284,1285,1291],{"cols":90},[92,1286,1288],{"href":950,"icon":951,"title":1287},"Run your scraper",[74,1289,1290],{},"Save, run, and collect the full dataset.",[92,1292,1294],{"href":568,"icon":569,"title":1293},"If something breaks",[74,1295,1296],{},"Diagnose a scraper that stops returning good data.",{"title":194,"searchDepth":249,"depth":249,"links":1298},[1299,1300,1301,1302],{"id":1226,"depth":90,"text":1227},{"id":1233,"depth":90,"text":1234},{"id":1271,"depth":90,"text":1272},{"id":347,"depth":90,"text":348},"Check your scraper against the real page before you save it.",{},5,{"title":740,"description":1303},"docs\u002Fusers\u002Fpreview-and-validate","UgWY4x0Hf8vlCnZSIbS9PM9-LBV5HZbCFTeubOI7LiQ",{"id":1310,"title":562,"badge":69,"body":1311,"description":565,"extension":259,"group":34,"icon":561,"lastUpdated":69,"meta":1374,"navigation":262,"order":90,"path":552,"popular":265,"publishedAt":69,"seo":1375,"sidebarTitle":69,"stem":1376,"tree":268,"__hash__":1377},"docs\u002Fdocs\u002Fusers\u002Fproxies.md",{"type":71,"value":1312,"toc":1369},[1313,1316,1320,1323,1337,1343,1347,1350,1355,1357],[74,1314,1315],{},"Some websites try to block automated visits. A proxy routes your scraper's\nrequests through a different network path, which often gets past that blocking so\nthe scraper can read the page.",[83,1317,1319],{"id":1318},"when-you-need-a-proxy","When you need a proxy",[74,1321,1322],{},"Consider a proxy when:",[289,1324,1325,1328,1334],{},[292,1326,1327],{},"A scraper that works on other sites returns nothing on this one.",[292,1329,866,1330,1333],{},[279,1331,1332],{"href":1068},"job fails"," in a way that suggests the site\nrefused the request.",[292,1335,1336],{},"The site loads fine for you in a normal browser but not for the scraper.",[74,1338,1339],{},[314,1340],{"alt":1341,"src":1342},"Proxy settings","\u002Fdocs\u002Fusers\u002Fproxies.png",[83,1344,1346],{"id":1345},"testing-whether-the-proxy-is-the-issue","Testing whether the proxy is the issue",[74,1348,1349],{},"When a run fails, you can retry it with or without a proxy. That is the fastest\nway to find out whether the proxy is helping or whether the problem lies\nelsewhere. If a run only succeeds with a proxy enabled, leave it on for that\nscraper.",[111,1351,1352],{"type":119},[74,1353,1354],{},"Do not enable a proxy by default. Proxied requests can be slower, so use one only\nfor sites that actually need it.",[83,1356,348],{"id":347},[88,1358,1359,1364],{"cols":90},[92,1360,1361],{"href":582,"icon":580,"title":497},[74,1362,1363],{},"The other lever for sites that will not load cleanly.",[92,1365,1366],{"href":1053,"icon":1054,"title":1055},[74,1367,1368],{},"See when Trawley flags a scraper as unhealthy.",{"title":194,"searchDepth":249,"depth":249,"links":1370},[1371,1372,1373],{"id":1318,"depth":90,"text":1319},{"id":1345,"depth":90,"text":1346},{"id":347,"depth":90,"text":348},{},{"title":562,"description":565},"docs\u002Fusers\u002Fproxies","Dsv7RSbQcDJhZBhDZUF6RQEDAV056skbLZgLlFpkVdk",{"id":1379,"title":1380,"badge":69,"body":1381,"description":1462,"extension":259,"group":8,"icon":94,"lastUpdated":69,"meta":1463,"navigation":262,"order":201,"path":1464,"popular":262,"publishedAt":69,"seo":1465,"sidebarTitle":69,"stem":1466,"tree":268,"__hash__":1467},"docs\u002Fdocs\u002Fusers\u002Fquickstart.md","Quickstart",{"type":71,"value":1382,"toc":1456},[1383,1386,1390,1393,1395,1429,1435,1439,1442,1444],[74,1384,1385],{},"Welcome to Trawley. You point it at a website, describe what you want in plain\nlanguage, and it builds a scraper that turns that site into structured,\nsearchable data. No code, no CSS selectors to hand-write.",[83,1387,1389],{"id":1388},"what-youll-need","What you'll need",[74,1391,1392],{},"A web browser and the address of a page that lists the things you care about,\nfor example a property listings page or a product catalogue. That's it.",[83,1394,138],{"id":137},[137,1396,1397,1407,1417,1423],{},[142,1398,1400],{"title":1399},"Create an account",[74,1401,1402,1403,1406],{},"Sign up at ",[78,1404,1405],{},"app.trawley.ai",". You start on a free plan, so you can build and test\na scraper right away.",[142,1408,1410],{"title":1409},"Start a new scraper",[74,1411,1412,1413,1416],{},"Click ",[295,1414,1415],{},"New scraper"," and paste the URL of the page you want to scrape. Trawley\nopens the page and starts looking at it for you.",[142,1418,1420],{"title":1419},"Tell the wizard what to extract",[74,1421,1422],{},"You chat with an assistant. Describe the data you want (\"the price, number of\nbedrooms, and location for each listing\") and it suggests fields, tries them\nagainst the real page, and shows you a preview.",[142,1424,1426],{"title":1425},"Save and run",[74,1427,1428],{},"When the preview looks right, save the scraper and run it. Trawley collects the\ndata and indexes it for search.",[74,1430,1431],{},[314,1432],{"alt":1433,"src":1434},"The Trawley setup wizard","\u002Fdocs\u002Fusers\u002Fthe-setup-wizard.png",[83,1436,1438],{"id":1437},"what-happens-next","What happens next",[74,1440,1441],{},"Once a scraper has run, you can browse and search its results, schedule it to\nre-run automatically, and query it from your own apps through the API.",[83,1443,348],{"id":347},[88,1445,1446,1450],{"cols":90},[92,1447,1448],{"href":968,"icon":966,"title":854},[74,1449,965],{},[92,1451,1453],{"href":721,"icon":943,"title":1452},"The setup wizard",[74,1454,1455],{},"A closer look at building a scraper by chatting.",{"title":194,"searchDepth":249,"depth":249,"links":1457},[1458,1459,1460,1461],{"id":1388,"depth":90,"text":1389},{"id":137,"depth":90,"text":138},{"id":1437,"depth":90,"text":1438},{"id":347,"depth":90,"text":348},"Set up your first Trawley scraper without writing code.",{},"\u002Fdocs\u002Fusers\u002Fquickstart",{"title":1380,"description":1462},"docs\u002Fusers\u002Fquickstart","4WcianGx6FYzD5e28tCK1a1iYqzoMxeazCOTJCLkCAY",{"id":1469,"title":1120,"badge":69,"body":1470,"description":1597,"extension":259,"group":21,"icon":951,"lastUpdated":69,"meta":1598,"navigation":262,"order":201,"path":950,"popular":265,"publishedAt":69,"seo":1599,"sidebarTitle":69,"stem":1600,"tree":268,"__hash__":1601},"docs\u002Fdocs\u002Fusers\u002Frunning-a-scrape.md",{"type":71,"value":1471,"toc":1591},[1472,1475,1479,1482,1488,1492,1495,1541,1550,1554,1566,1576,1578],[74,1473,1474],{},"Once a scraper is saved, running it collects the data and indexes it for search.\nEach run is called a job.",[83,1476,1478],{"id":1477},"running-on-demand","Running on demand",[74,1480,1481],{},"Open a scraper from your dashboard and start a run. Trawley queues the work,\nopens the site, and captures every item. You can leave the page; the run\ncontinues in the background.",[74,1483,1484],{},[314,1485],{"alt":1486,"src":1487},"A scraper's job history","\u002Fdocs\u002Fusers\u002Frunning-a-scrape.png",[83,1489,1491],{"id":1490},"the-job-lifecycle","The job lifecycle",[74,1493,1494],{},"A job moves through a few states:",[638,1496,1497,1507],{},[641,1498,1499],{},[644,1500,1501,1504],{},[647,1502,1503],{},"State",[647,1505,1506],{},"Meaning",[657,1508,1509,1517,1525,1533],{},[644,1510,1511,1514],{},[662,1512,1513],{},"Pending",[662,1515,1516],{},"The job is queued and waiting to start.",[644,1518,1519,1522],{},[662,1520,1521],{},"Running",[662,1523,1524],{},"Trawley is actively collecting data from the site.",[644,1526,1527,1530],{},[662,1528,1529],{},"Completed",[662,1531,1532],{},"The run finished and results are ready to view and search.",[644,1534,1535,1538],{},[662,1536,1537],{},"Failed",[662,1539,1540],{},"Something stopped the run. Open the job to see why.",[111,1542,1543],{"type":119},[74,1544,1545,1546,1549],{},"Large sites with lots of pages or ",[279,1547,1548],{"href":1134},"nested detail pages","\ntake longer. The job keeps running in the background, so you do not need to wait\non the page.",[83,1551,1553],{"id":1552},"after-a-run","After a run",[74,1555,1556,1557,1561,1562,1565],{},"A completed job updates the scraper's results. From there you can\n",[279,1558,1560],{"href":1559},"\u002Fdocs\u002Fusers\u002Fviewing-results","browse and search"," them, or set the scraper to\nre-run on a ",[279,1563,1564],{"href":433},"schedule"," so the data stays fresh.",[74,1567,1568,1569,1572,1573,1575],{},"If a run fails or the data looks off, the ",[279,1570,1571],{"href":1068},"job logs","\nand the ",[279,1574,1013],{"href":568}," help you work out what happened.",[83,1577,348],{"id":347},[88,1579,1580,1586],{"cols":90},[92,1581,1583],{"href":433,"icon":473,"title":1582},"Schedule it",[74,1584,1585],{},"Keep your data current automatically.",[92,1587,1588],{"href":1068,"icon":1066,"title":974},[74,1589,1590],{},"See exactly what a run did.",{"title":194,"searchDepth":249,"depth":249,"links":1592},[1593,1594,1595,1596],{"id":1477,"depth":90,"text":1478},{"id":1490,"depth":90,"text":1491},{"id":1552,"depth":90,"text":1553},{"id":347,"depth":90,"text":348},"Run a scraper, and understand the job lifecycle.",{},{"title":1120,"description":1597},"docs\u002Fusers\u002Frunning-a-scrape","qlACo_NW-C9pGBf8msY1HNa4t4JIEOw4SOw0wf9Onno",{"id":1603,"title":474,"badge":69,"body":1604,"description":1685,"extension":259,"group":21,"icon":473,"lastUpdated":69,"meta":1686,"navigation":262,"order":90,"path":433,"popular":265,"publishedAt":69,"seo":1687,"sidebarTitle":69,"stem":1688,"tree":268,"__hash__":1689},"docs\u002Fdocs\u002Fusers\u002Fscheduling.md",{"type":71,"value":1605,"toc":1679},[1606,1609,1613,1616,1622,1626,1629,1649,1654,1658,1664,1666],[74,1607,1608],{},"Data goes stale. Scheduling re-runs a scraper on a regular cadence so its results\nstay current without you remembering to press a button.",[83,1610,1612],{"id":1611},"setting-a-schedule","Setting a schedule",[74,1614,1615],{},"You describe the cadence in plain language, for example \"every morning at 7am\" or\n\"once a week on Monday\". Trawley turns that into a recurring schedule for you, so\nyou never write a cron expression by hand.",[74,1617,1618],{},[314,1619],{"alt":1620,"src":1621},"Scheduling a scraper","\u002Fdocs\u002Fusers\u002Fscheduling.png",[83,1623,1625],{"id":1624},"choosing-a-cadence","Choosing a cadence",[74,1627,1628],{},"Match the schedule to how often the source actually changes:",[289,1630,1631,1637,1643],{},[292,1632,1633,1636],{},[295,1634,1635],{},"Daily"," for fast-moving listings like property or job boards.",[292,1638,1639,1642],{},[295,1640,1641],{},"Weekly"," for catalogues that change less often.",[292,1644,1645,1648],{},[295,1646,1647],{},"Hourly"," only when you genuinely need near-real-time data, since each run uses\nyour plan's allowance.",[111,1650,1651],{"type":119},[74,1652,1653],{},"More frequent is not always better. Every scheduled run is a job that counts\ntoward your usage. Pick the slowest cadence that still keeps your data fresh\nenough.",[83,1655,1657],{"id":1656},"managing-scheduled-runs","Managing scheduled runs",[74,1659,1660,1661,1663],{},"Each scheduled run is a normal ",[279,1662,900],{"href":950},", so it shows up\nin the scraper's history with its own status and logs. You can change or remove a\nschedule at any time, and still run the scraper on demand whenever you want.",[83,1665,348],{"id":347},[88,1667,1668,1673],{"cols":90},[92,1669,1670],{"href":1068,"icon":1066,"title":974},[74,1671,1672],{},"Review what each scheduled run did.",[92,1674,1676],{"href":338,"icon":359,"title":1675},"Plans & limits",[74,1677,1678],{},"How runs count against your plan.",{"title":194,"searchDepth":249,"depth":249,"links":1680},[1681,1682,1683,1684],{"id":1611,"depth":90,"text":1612},{"id":1624,"depth":90,"text":1625},{"id":1656,"depth":90,"text":1657},{"id":347,"depth":90,"text":348},"Keep your data fresh by running a scraper automatically.",{},{"title":474,"description":1685},"docs\u002Fusers\u002Fscheduling","b5meidpukzhEVCezIqOfrgkubIIG-X9fjR36GNEap1k",{"id":1691,"title":1692,"badge":69,"body":1693,"description":1763,"extension":259,"group":28,"icon":820,"lastUpdated":69,"meta":1764,"navigation":262,"order":90,"path":828,"popular":262,"publishedAt":69,"seo":1765,"sidebarTitle":69,"stem":1766,"tree":268,"__hash__":1767},"docs\u002Fdocs\u002Fusers\u002Fsearching-results.md","Searching results",{"type":71,"value":1694,"toc":1757},[1695,1698,1702,1705,1711,1715,1718,1730,1734,1741,1743],[74,1696,1697],{},"Trawley does not just store your data, it makes it searchable in plain language.\nYou can ask for what you want the way you would say it out loud, and Trawley\nworks out the filters for you.",[83,1699,1701],{"id":1700},"searching-in-the-dashboard","Searching in the dashboard",[74,1703,1704],{},"From a scraper's results, search using natural language: \"3 bed houses under\n£500k with a garden\", \"flats added this week\", or \"anything in Kendal with\nparking\". Trawley combines an understanding of your meaning with exact filters on\nnumbers and dates to return the right items.",[74,1706,1707],{},[314,1708],{"alt":1709,"src":1710},"Natural language search over results","\u002Fdocs\u002Fusers\u002Fsearching-results.png",[83,1712,1714],{"id":1713},"why-it-understands-you","Why it understands you",[74,1716,1717],{},"Behind the scenes, Trawley reads your query and decides which parts are exact\nconstraints (under £500k, 3 beds) and which are fuzzy (near Kendal, nice garden).\nIt filters precisely on the first and matches by meaning on the second. That is\nwhy you do not have to phrase queries in any special way.",[111,1719,1720],{"type":119},[74,1721,1722,1723,1726,1727,1729],{},"Searches lean on your ",[279,1724,1725],{"href":753},"field types",". \"Under £500k\"\nonly works as a precise filter if ",[78,1728,608],{}," is a number. If a range filter is not\nbehaving, check that the field's type is right.",[83,1731,1733],{"id":1732},"searching-from-your-own-apps","Searching from your own apps",[74,1735,1736,1737,1740],{},"The same natural language search is available through the API, so you can build\nit into your own product or an AI agent. See\n",[279,1738,1739],{"href":819},"hybrid search"," for developers.",[83,1742,348],{"id":347},[88,1744,1745,1751],{"cols":90},[92,1746,1748],{"href":848,"icon":835,"title":1747},"Export your data",[74,1749,1750],{},"Take results into a spreadsheet or another tool.",[92,1752,1754],{"href":819,"icon":820,"title":1753},"Search from code",[74,1755,1756],{},"Use the same search in your own apps.",{"title":194,"searchDepth":249,"depth":249,"links":1758},[1759,1760,1761,1762],{"id":1700,"depth":90,"text":1701},{"id":1713,"depth":90,"text":1714},{"id":1732,"depth":90,"text":1733},{"id":347,"depth":90,"text":348},"Ask questions of your data in plain language.",{},{"title":1692,"description":1763},"docs\u002Fusers\u002Fsearching-results","TposUaQ8z49k61yPveunWgKHCsBLopDC-ZHjNg6wonE",{"id":1769,"title":353,"badge":69,"body":1770,"description":1857,"extension":259,"group":41,"icon":268,"lastUpdated":69,"meta":1858,"navigation":262,"order":201,"path":281,"popular":265,"publishedAt":69,"seo":1859,"sidebarTitle":69,"stem":1860,"tree":268,"__hash__":1861},"docs\u002Fdocs\u002Fusers\u002Fteams-and-members.md",{"type":71,"value":1771,"toc":1850},[1772,1775,1779,1782,1788,1792,1795,1815,1819,1822,1827,1831,1834,1836],[74,1773,1774],{},"Teams are how Trawley groups scrapers and people. Your scrapers belong to a team,\nand the people in that team can work on them together. Billing and plan limits\nalso live at the team level.",[83,1776,1778],{"id":1777},"creating-a-team","Creating a team",[74,1780,1781],{},"You can create a team for a project, a client, or an organisation. You can belong\nto several teams at once, for example a personal team and a shared work team, and\nswitch between them whenever you like.",[74,1783,1784],{},[314,1785],{"alt":1786,"src":1787},"Team settings and members","\u002Fdocs\u002Fusers\u002Fteams-and-members.png",[83,1789,1791],{"id":1790},"inviting-members","Inviting members",[74,1793,1794],{},"Invite people to a team by sending them an invitation. When they accept, they\njoin the team and can see and work on its scrapers. This is how you share a\nscraper with colleagues without handing over your own login.",[137,1796,1797,1803,1809],{},[142,1798,1800],{"title":1799},"Open the team's settings",[74,1801,1802],{},"Go to the team you want to add someone to.",[142,1804,1806],{"title":1805},"Send an invite",[74,1807,1808],{},"Invite the person. They receive a link to join the team.",[142,1810,1812],{"title":1811},"They accept",[74,1813,1814],{},"Once they join, they appear in the member list with a role.",[83,1816,1818],{"id":1817},"roles","Roles",[74,1820,1821],{},"Members have roles that control what they can do in the team. Use roles to give\ncollaborators the access they need without making everyone an administrator.",[111,1823,1824],{"type":119},[74,1825,1826],{},"Keep the number of administrators small. Give most collaborators a role that lets\nthem do their work, and reserve admin access for the few people who manage the\nteam and its billing.",[83,1828,1830],{"id":1829},"switching-teams","Switching teams",[74,1832,1833],{},"A team switcher lets you move between the teams you belong to. The scrapers,\nresults, and billing you see always belong to the team you currently have active.",[83,1835,348],{"id":347},[88,1837,1838,1843],{"cols":90},[92,1839,1840],{"href":338,"icon":359,"title":360},[74,1841,1842],{},"Manage a team's plan and usage.",[92,1844,1847],{"href":1845,"icon":731,"title":1846},"\u002Fdocs\u002Fusers\u002Ftransfer-between-teams","Transfer a scraper",[74,1848,1849],{},"Move a scraper into a shared team.",{"title":194,"searchDepth":249,"depth":249,"links":1851},[1852,1853,1854,1855,1856],{"id":1777,"depth":90,"text":1778},{"id":1790,"depth":90,"text":1791},{"id":1817,"depth":90,"text":1818},{"id":1829,"depth":90,"text":1830},{"id":347,"depth":90,"text":348},"Create teams, invite people, and manage who can do what.",{},{"title":353,"description":1857},"docs\u002Fusers\u002Fteams-and-members","_libVN-rWYUBtPpe9iliTHf0gqtHFFQgMiKRxI5Qok4",{"id":1863,"title":570,"badge":69,"body":1864,"description":1936,"extension":259,"group":21,"icon":569,"lastUpdated":69,"meta":1937,"navigation":262,"order":1133,"path":568,"popular":265,"publishedAt":69,"seo":1938,"sidebarTitle":69,"stem":1939,"tree":268,"__hash__":1940},"docs\u002Fdocs\u002Fusers\u002Fthe-doctor.md",{"type":71,"value":1865,"toc":1930},[1866,1869,1873,1876,1893,1895,1898,1904,1908,1911,1916,1918],[74,1867,1868],{},"Websites change. When a site you scrape moves things around, a scraper that\nworked yesterday can start returning empty or wrong data. The doctor is the tool\nfor putting it right, the same conversational assistant you used to build the\nscraper, now focused on fixing it.",[83,1870,1872],{"id":1871},"when-to-use-it","When to use it",[74,1874,1875],{},"Run the doctor when:",[289,1877,1878,1885,1888],{},[292,1879,1880,1881,1884],{},"A job ",[279,1882,1883],{"href":1068},"failed"," or returned far fewer items than\nusual.",[292,1886,1887],{},"A field that used to populate is now empty.",[292,1889,866,1890,1892],{},[279,1891,131],{"href":1053}," flags that a scraper looks unhealthy.",[83,1894,1090],{"id":1089},[74,1896,1897],{},"The doctor re-opens the site, compares it against your scraper's configuration,\nand works out what changed. Because it looks at the live page, it can tell the\ndifference between \"the site is down\" and \"the price moved to a different place\"\nand propose a fix for the latter.",[74,1899,1900],{},[314,1901],{"alt":1902,"src":1903},"The doctor diagnosing a scraper","\u002Fdocs\u002Fusers\u002Fthe-doctor.png",[83,1905,1907],{"id":1906},"fixing-things","Fixing things",[74,1909,1910],{},"You work with the doctor the same way you built the scraper: describe what looks\nwrong and it re-maps the affected fields, tests them against the real page, and\nshows you a fresh preview. When the preview is healthy again, save and re-run.",[111,1912,1913],{"type":119},[74,1914,1915],{},"After a fix, run the scraper once by hand and confirm the results look right\nbefore relying on the next scheduled run. A quick manual check saves a stale\novernight job.",[83,1917,348],{"id":347},[88,1919,1920,1925],{"cols":90},[92,1921,1922],{"href":1053,"icon":1054,"title":1055},[74,1923,1924],{},"Spot health problems before they fail a run.",[92,1926,1927],{"href":552,"icon":561,"title":562},[74,1928,1929],{},"When the fix is getting past a block, not re-mapping fields.",{"title":194,"searchDepth":249,"depth":249,"links":1931},[1932,1933,1934,1935],{"id":1871,"depth":90,"text":1872},{"id":1089,"depth":90,"text":1090},{"id":1906,"depth":90,"text":1907},{"id":347,"depth":90,"text":348},"Diagnose and repair a scraper that has stopped returning good data.",{},{"title":570,"description":1936},"docs\u002Fusers\u002Fthe-doctor","cSdUjfVFdFz7U_M9mEFg_9bg-NMzaFW7EgiTyZc2Mtc",{"id":1942,"title":1452,"badge":69,"body":1943,"description":2061,"extension":259,"group":13,"icon":943,"lastUpdated":69,"meta":2062,"navigation":262,"order":201,"path":721,"popular":262,"publishedAt":69,"seo":2063,"sidebarTitle":69,"stem":2064,"tree":268,"__hash__":2065},"docs\u002Fdocs\u002Fusers\u002Fthe-setup-wizard.md",{"type":71,"value":1944,"toc":2054},[1945,1948,1952,1974,1978,1982,1985,2011,2015,2018,2023,2027,2040,2042],[74,1946,1947],{},"You build a Trawley scraper by talking to an assistant. You describe what you\nwant in plain language, and it inspects the real page, proposes how to extract\nyour data, tests it, and shows you a preview. You never touch a CSS selector.",[83,1949,1951],{"id":1950},"starting-out","Starting out",[137,1953,1954,1962,1968],{},[142,1955,1957],{"title":1956},"Paste a start URL",[74,1958,1412,1959,1961],{},[295,1960,1415],{}," and enter the address of a page that lists the items you\nwant. The assistant opens that page and begins reading its structure.",[142,1963,1965],{"title":1964},"Describe what you want",[74,1966,1967],{},"Tell the assistant the data to capture, for example: \"Grab the title, price,\nnumber of bedrooms, and location for each property.\" It works out which part of\nthe page each field comes from.",[142,1969,1971],{"title":1970},"Watch it work",[74,1972,1973],{},"As it goes, the assistant shows what it is doing: reading the page, testing a\nfield, checking for pagination, and pulling a preview. You can follow along and\nstep in any time.",[74,1975,1976],{},[314,1977],{"alt":1433,"src":1434},[83,1979,1981],{"id":1980},"what-the-assistant-can-do","What the assistant can do",[74,1983,1984],{},"The assistant is not just generating guesses. It works against the live page and\ncan:",[289,1986,1987,1993,1999,2005],{},[292,1988,1989,1992],{},[295,1990,1991],{},"Read the page structure"," to find the repeating items in a list.",[292,1994,1995,1998],{},[295,1996,1997],{},"Test a field"," by extracting it from the real page and showing you the value.",[292,2000,2001,2004],{},[295,2002,2003],{},"Check pagination"," so the scraper collects every page, not just the first.",[292,2006,2007,2010],{},[295,2008,2009],{},"Preview results"," so you see real captured data before saving.",[83,2012,2014],{"id":2013},"refining-by-conversation","Refining by conversation",[74,2016,2017],{},"If a field is wrong, say so. \"The price is picking up the old price, use the\ndiscounted one\" or \"split the location into town and county\" are the kinds of\ninstructions it understands. The configuration updates as you chat, and you can\nkeep refining until the preview is right.",[111,2019,2020],{"type":119},[74,2021,2022],{},"Be specific about edge cases you have already spotted: missing prices, items that\nare sold, or fields that sometimes have two values. Mentioning them early saves a\nround trip later.",[83,2024,2026],{"id":2025},"saving","Saving",[74,2028,2029,2030,2033,2034,2036,2037,81],{},"When the preview looks correct, save the scraper. From there you can\n",[279,2031,2032],{"href":950},"run it",", put it on a\n",[279,2035,1564],{"href":433},", and ",[279,2038,2039],{"href":828},"search the results",[83,2041,348],{"id":347},[88,2043,2044,2049],{"cols":90},[92,2045,2046],{"href":753,"icon":751,"title":588},[74,2047,2048],{},"Pick the right fields and data types for clean results.",[92,2050,2051],{"href":738,"icon":739,"title":740},[74,2052,2053],{},"Make sure the data is right before you save.",{"title":194,"searchDepth":249,"depth":249,"links":2055},[2056,2057,2058,2059,2060],{"id":1950,"depth":90,"text":1951},{"id":1980,"depth":90,"text":1981},{"id":2013,"depth":90,"text":2014},{"id":2025,"depth":90,"text":2026},{"id":347,"depth":90,"text":348},"Build a scraper by chatting with an assistant that reads the page for you.",{},{"title":1452,"description":2061},"docs\u002Fusers\u002Fthe-setup-wizard","7hcJY24fX421fY0IrPXJoOBlInHXRK96L_B6s5XU-L8",{"id":2067,"title":2068,"badge":69,"body":2069,"description":2132,"extension":259,"group":34,"icon":731,"lastUpdated":69,"meta":2133,"navigation":262,"order":1133,"path":1845,"popular":265,"publishedAt":69,"seo":2134,"sidebarTitle":69,"stem":2135,"tree":268,"__hash__":2136},"docs\u002Fdocs\u002Fusers\u002Ftransfer-between-teams.md","Transfer between teams",{"type":71,"value":2070,"toc":2127},[2071,2077,2081,2092,2098,2102,2108,2113,2115],[74,2072,2073,2074,2076],{},"Scrapers belong to a ",[279,2075,386],{"href":281},". If you need a scraper\nto live under a different team, for example moving it from a personal team to a\nshared work team, you can transfer it.",[83,2078,2080],{"id":2079},"why-transfer","Why transfer",[289,2082,2083,2086,2089],{},[292,2084,2085],{},"You built a scraper in your own team and now want colleagues to share it.",[292,2087,2088],{},"You are reorganising work across teams.",[292,2090,2091],{},"Billing for the scraper's runs should sit with a different team.",[74,2093,2094],{},[314,2095],{"alt":2096,"src":2097},"Transferring a scraper to another team","\u002Fdocs\u002Fusers\u002Ftransfer-between-teams.png",[83,2099,2101],{"id":2100},"what-moves-with-it","What moves with it",[74,2103,2104,2105,81],{},"Transferring a scraper moves the scraper and its configuration to the destination\nteam. From then on, the destination team's members can manage it, and its runs\ncount toward that team's ",[279,2106,2107],{"href":338},"plan",[111,2109,2110],{"type":131},[74,2111,2112],{},"You can only transfer a scraper into a team you belong to. Make sure you are a\nmember of the destination team first.",[83,2114,348],{"id":347},[88,2116,2117,2122],{"cols":90},[92,2118,2119],{"href":281,"icon":268,"title":353},[74,2120,2121],{},"Create teams and invite people to them.",[92,2123,2124],{"href":338,"icon":359,"title":360},[74,2125,2126],{},"How a team's usage and limits work.",{"title":194,"searchDepth":249,"depth":249,"links":2128},[2129,2130,2131],{"id":2079,"depth":90,"text":2080},{"id":2100,"depth":90,"text":2101},{"id":347,"depth":90,"text":348},"Move a scraper from one team to another.",{},{"title":2068,"description":2132},"docs\u002Fusers\u002Ftransfer-between-teams","nyD8kCsKb013WuGSJg_DhmaltFVFWVwe9dEu4wKkmTk",{"id":2138,"title":2139,"badge":69,"body":2140,"description":2208,"extension":259,"group":28,"icon":2209,"lastUpdated":69,"meta":2210,"navigation":262,"order":201,"path":1559,"popular":265,"publishedAt":69,"seo":2211,"sidebarTitle":69,"stem":2212,"tree":268,"__hash__":2213},"docs\u002Fdocs\u002Fusers\u002Fviewing-results.md","Viewing results",{"type":71,"value":2141,"toc":2202},[2142,2145,2149,2152,2158,2162,2171,2175,2186,2188],[74,2143,2144],{},"After a scraper runs, its results are ready to browse in the dashboard. Each\nresult is one item the scraper captured, with a value for every field you\ndefined.",[83,2146,2148],{"id":2147},"browsing","Browsing",[74,2150,2151],{},"Open a scraper to see its results in a table, one row per item and one column per\nfield. Page through them to get a feel for what was captured.",[74,2153,2154],{},[314,2155],{"alt":2156,"src":2157},"A scraper's results table","\u002Fdocs\u002Fusers\u002Fviewing-results.png",[83,2159,2161],{"id":2160},"results-come-from-the-latest-run","Results come from the latest run",[74,2163,2164,2165,2167,2168,81],{},"The results you see reflect the most recent completed ",[279,2166,900],{"href":950},".\nEach run refreshes the data, so what you browse is always the latest snapshot\nTrawley collected. To compare two runs and see what changed, developers can use\nthe ",[279,2169,2170],{"href":622},"diff endpoint",[83,2172,2174],{"id":2173},"from-browsing-to-answers","From browsing to answers",[74,2176,2177,2178,2181,2182,2185],{},"Scrolling a table is fine for a quick look, but the real power is asking\nquestions. Instead of paging through hundreds of listings, you can\n",[279,2179,2180],{"href":828},"search your results"," in plain language, or\n",[279,2183,2184],{"href":848},"export them"," to work with elsewhere.",[83,2187,348],{"id":347},[88,2189,2190,2196],{"cols":90},[92,2191,2193],{"href":828,"icon":820,"title":2192},"Search results",[74,2194,2195],{},"Ask questions in plain language.",[92,2197,2199],{"href":848,"icon":835,"title":2198},"Export",[74,2200,2201],{},"Download your data as CSV or JSON.",{"title":194,"searchDepth":249,"depth":249,"links":2203},[2204,2205,2206,2207],{"id":2147,"depth":90,"text":2148},{"id":2160,"depth":90,"text":2161},{"id":2173,"depth":90,"text":2174},{"id":347,"depth":90,"text":348},"Browse the data your scraper has collected.","database",{},{"title":2139,"description":2208},"docs\u002Fusers\u002Fviewing-results","I9CS2ej-QPGPQM22YQMdSJmmLv2DBUNRuek9PfpTIqU",{"id":2215,"title":1055,"badge":69,"body":2216,"description":2299,"extension":259,"group":34,"icon":1054,"lastUpdated":69,"meta":2300,"navigation":262,"order":249,"path":1053,"popular":265,"publishedAt":69,"seo":2301,"sidebarTitle":69,"stem":2302,"tree":268,"__hash__":2303},"docs\u002Fdocs\u002Fusers\u002Fwarnings.md",{"type":71,"value":2217,"toc":2294},[2218,2221,2225,2228,2239,2245,2249,2252,2275,2280,2282],[74,2219,2220],{},"Warnings are Trawley's early signals that a scraper may not be healthy. They flag\nproblems while you can still fix them, rather than letting a scheduled run quietly\ncollect bad data.",[83,2222,2224],{"id":2223},"what-triggers-a-warning","What triggers a warning",[74,2226,2227],{},"A scraper can be flagged when something looks off, for example:",[289,2229,2230,2233,2236],{},[292,2231,2232],{},"A run captured far fewer items than usual.",[292,2234,2235],{},"A field that normally has values came back mostly empty.",[292,2237,2238],{},"The site appears to have changed in a way that affects the scraper.",[74,2240,2241],{},[314,2242],{"alt":2243,"src":2244},"A scraper's health and warnings","\u002Fdocs\u002Fusers\u002Fwarnings.png",[83,2246,2248],{"id":2247},"what-to-do-about-one","What to do about one",[74,2250,2251],{},"A warning is a prompt to look, not always a failure. When you see one:",[137,2253,2254,2260,2266],{},[142,2255,2257],{"title":2256},"Open the scraper and read the warning",[74,2258,2259],{},"It tells you what looked wrong, such as a drop in results or an empty field.",[142,2261,2263],{"title":2262},"Check recent results",[74,2264,2265],{},"Confirm whether the data is genuinely degraded or whether the source simply had\nfewer items this time.",[142,2267,2269],{"title":2268},"Run the doctor if needed",[74,2270,2271,2272,2274],{},"If the scraper is genuinely broken, the ",[279,2273,1013],{"href":568}," will\ndiagnose and fix it.",[111,2276,2277],{"type":119},[74,2278,2279],{},"Do not dismiss a warning on a scheduled scraper without checking. The whole point\nis to catch a problem before the next overnight run captures a page of empty\nrecords.",[83,2281,348],{"id":347},[88,2283,2284,2289],{"cols":90},[92,2285,2286],{"href":568,"icon":569,"title":570},[74,2287,2288],{},"Repair a scraper a warning flagged.",[92,2290,2291],{"href":1068,"icon":1066,"title":974},[74,2292,2293],{},"Dig into what a specific run did.",{"title":194,"searchDepth":249,"depth":249,"links":2295},[2296,2297,2298],{"id":2223,"depth":90,"text":2224},{"id":2247,"depth":90,"text":2248},{"id":347,"depth":90,"text":348},"Catch scraper health problems before they cost you a run.",{},{"title":1055,"description":2299},"docs\u002Fusers\u002Fwarnings","msRyYGAlN3VLkDLeGJa-h1-w2_lFESH-ZSMd4T9MAqA",{"id":1691,"title":1692,"badge":69,"body":2305,"description":1763,"extension":259,"group":28,"icon":820,"lastUpdated":69,"meta":2353,"navigation":262,"order":90,"path":828,"popular":262,"publishedAt":69,"seo":2354,"sidebarTitle":69,"stem":1766,"tree":268,"__hash__":1767},{"type":71,"value":2306,"toc":2347},[2307,2309,2311,2313,2317,2319,2321,2329,2331,2335,2337],[74,2308,1697],{},[83,2310,1701],{"id":1700},[74,2312,1704],{},[74,2314,2315],{},[314,2316],{"alt":1709,"src":1710},[83,2318,1714],{"id":1713},[74,2320,1717],{},[111,2322,2323],{"type":119},[74,2324,1722,2325,1726,2327,1729],{},[279,2326,1725],{"href":753},[78,2328,608],{},[83,2330,1733],{"id":1732},[74,2332,1736,2333,1740],{},[279,2334,1739],{"href":819},[83,2336,348],{"id":347},[88,2338,2339,2343],{"cols":90},[92,2340,2341],{"href":848,"icon":835,"title":1747},[74,2342,1750],{},[92,2344,2345],{"href":819,"icon":820,"title":1753},[74,2346,1756],{},{"title":194,"searchDepth":249,"depth":249,"links":2348},[2349,2350,2351,2352],{"id":1700,"depth":90,"text":1701},{"id":1713,"depth":90,"text":1714},{"id":1732,"depth":90,"text":1733},{"id":347,"depth":90,"text":348},{},{"title":1692,"description":1763},1780914810578]