[{"data":1,"prerenderedAt":2800},["ShallowReactive",2],{"docs-tree-navigation":3,"docs-popular":4,"docs-changelog-feed":2717},null,[5,494,594,1271,1623,2406,2501,2583],{"id":6,"title":7,"badge":3,"body":8,"description":483,"extension":484,"group":485,"icon":486,"lastUpdated":3,"meta":487,"navigation":488,"order":104,"path":489,"popular":488,"publishedAt":3,"seo":490,"sidebarTitle":3,"stem":491,"tree":492,"__hash__":493},"docs\u002Fdocs\u002Fagents\u002Fchatgpt-custom-gpt.md","ChatGPT custom GPT",{"type":9,"value":10,"toc":477},"minimal",[11,21,33,38,81,85,91,420,431,435,442,450,454,473],[12,13,14,15,20],"p",{},"You can build a custom GPT that searches your Trawley scraper's live data and\nanswers in plain language. This needs no code: ChatGPT calls Trawley's\n",[16,17,19],"a",{"href":18},"\u002Fdocs\u002Fdevelopers\u002Fhybrid-search","hybrid search"," endpoint through a GPT Action.",[22,23,25],"callout",{"type":24},"info",[12,26,27,28,32],{},"Custom GPTs require a ChatGPT Plus, Team, or Enterprise plan. The steps below use\nthe GPT Builder's ",[29,30,31],"strong",{},"Actions"," feature.",[34,35,37],"h2",{"id":36},"steps","Steps",[36,39,40,52,66,75],{},[41,42,44],"step",{"title":43},"Get your scraper ID",[12,45,46,47,51],{},"Open your scraper in the dashboard. The ID is the last part of the URL, for\nexample ",[48,49,50],"code",{},"scr_8f2a1c9e",".",[41,53,55],{"title":54},"Create a new GPT",[12,56,57,58,61,62,65],{},"In ChatGPT, go to ",[29,59,60],{},"Explore GPTs → Create",", then open the ",[29,63,64],{},"Configure"," tab.",[41,67,69],{"title":68},"Add an Action",[12,70,71,72,74],{},"Under ",[29,73,31],{},", add a new action and paste the schema below, replacing the\nscraper ID with yours.",[41,76,78],{"title":77},"Test it",[12,79,80],{},"Ask your GPT something like \"find 3 bed houses with a garden\". It calls the\naction and answers from the live results.",[34,82,84],{"id":83},"the-action-schema","The action schema",[12,86,87,88,90],{},"This OpenAPI schema describes the hybrid endpoint to ChatGPT. Replace\n",[48,89,50],{}," with your scraper ID.",[92,93,98],"pre",{"className":94,"code":95,"language":96,"meta":97,"style":97},"language-yaml shiki shiki-themes github-light","openapi: 3.1.0\ninfo:\n  title: Trawley scraper search\n  version: 1.0.0\nservers:\n  - url: https:\u002F\u002Fapi.trawley.ai\npaths:\n  \u002Fv1\u002Fscrapers\u002Fscr_8f2a1c9e\u002Fhybrid:\n    get:\n      operationId: searchListings\n      summary: Search the scraper's results in natural language.\n      parameters:\n        - name: search\n          in: query\n          required: true\n          description: A natural language query describing what to find.\n          schema:\n            type: string\n        - name: take\n          in: query\n          required: false\n          description: How many results to return.\n          schema:\n            type: integer\n            default: 10\n      responses:\n        \"200\":\n          description: Matching results.\n          content:\n            application\u002Fjson:\n              schema:\n                type: object\n","yaml","",[48,99,100,117,125,137,148,156,170,178,186,194,205,216,224,238,249,260,271,279,290,302,311,321,331,338,348,359,367,375,385,393,401,409],{"__ignoreMap":97},[101,102,105,109,113],"span",{"class":103,"line":104},"line",1,[101,106,108],{"class":107},"shJU0","openapi",[101,110,112],{"class":111},"sgsFI",": ",[101,114,116],{"class":115},"sYu0t","3.1.0\n",[101,118,120,122],{"class":103,"line":119},2,[101,121,24],{"class":107},[101,123,124],{"class":111},":\n",[101,126,128,131,133],{"class":103,"line":127},3,[101,129,130],{"class":107},"  title",[101,132,112],{"class":111},[101,134,136],{"class":135},"sYBdl","Trawley scraper search\n",[101,138,140,143,145],{"class":103,"line":139},4,[101,141,142],{"class":107},"  version",[101,144,112],{"class":111},[101,146,147],{"class":115},"1.0.0\n",[101,149,151,154],{"class":103,"line":150},5,[101,152,153],{"class":107},"servers",[101,155,124],{"class":111},[101,157,159,162,165,167],{"class":103,"line":158},6,[101,160,161],{"class":111},"  - ",[101,163,164],{"class":107},"url",[101,166,112],{"class":111},[101,168,169],{"class":135},"https:\u002F\u002Fapi.trawley.ai\n",[101,171,173,176],{"class":103,"line":172},7,[101,174,175],{"class":107},"paths",[101,177,124],{"class":111},[101,179,181,184],{"class":103,"line":180},8,[101,182,183],{"class":107},"  \u002Fv1\u002Fscrapers\u002Fscr_8f2a1c9e\u002Fhybrid",[101,185,124],{"class":111},[101,187,189,192],{"class":103,"line":188},9,[101,190,191],{"class":107},"    get",[101,193,124],{"class":111},[101,195,197,200,202],{"class":103,"line":196},10,[101,198,199],{"class":107},"      operationId",[101,201,112],{"class":111},[101,203,204],{"class":135},"searchListings\n",[101,206,208,211,213],{"class":103,"line":207},11,[101,209,210],{"class":107},"      summary",[101,212,112],{"class":111},[101,214,215],{"class":135},"Search the scraper's results in natural language.\n",[101,217,219,222],{"class":103,"line":218},12,[101,220,221],{"class":107},"      parameters",[101,223,124],{"class":111},[101,225,227,230,233,235],{"class":103,"line":226},13,[101,228,229],{"class":111},"        - ",[101,231,232],{"class":107},"name",[101,234,112],{"class":111},[101,236,237],{"class":135},"search\n",[101,239,241,244,246],{"class":103,"line":240},14,[101,242,243],{"class":107},"          in",[101,245,112],{"class":111},[101,247,248],{"class":135},"query\n",[101,250,252,255,257],{"class":103,"line":251},15,[101,253,254],{"class":107},"          required",[101,256,112],{"class":111},[101,258,259],{"class":115},"true\n",[101,261,263,266,268],{"class":103,"line":262},16,[101,264,265],{"class":107},"          description",[101,267,112],{"class":111},[101,269,270],{"class":135},"A natural language query describing what to find.\n",[101,272,274,277],{"class":103,"line":273},17,[101,275,276],{"class":107},"          schema",[101,278,124],{"class":111},[101,280,282,285,287],{"class":103,"line":281},18,[101,283,284],{"class":107},"            type",[101,286,112],{"class":111},[101,288,289],{"class":135},"string\n",[101,291,293,295,297,299],{"class":103,"line":292},19,[101,294,229],{"class":111},[101,296,232],{"class":107},[101,298,112],{"class":111},[101,300,301],{"class":135},"take\n",[101,303,305,307,309],{"class":103,"line":304},20,[101,306,243],{"class":107},[101,308,112],{"class":111},[101,310,248],{"class":135},[101,312,314,316,318],{"class":103,"line":313},21,[101,315,254],{"class":107},[101,317,112],{"class":111},[101,319,320],{"class":115},"false\n",[101,322,324,326,328],{"class":103,"line":323},22,[101,325,265],{"class":107},[101,327,112],{"class":111},[101,329,330],{"class":135},"How many results to return.\n",[101,332,334,336],{"class":103,"line":333},23,[101,335,276],{"class":107},[101,337,124],{"class":111},[101,339,341,343,345],{"class":103,"line":340},24,[101,342,284],{"class":107},[101,344,112],{"class":111},[101,346,347],{"class":135},"integer\n",[101,349,351,354,356],{"class":103,"line":350},25,[101,352,353],{"class":107},"            default",[101,355,112],{"class":111},[101,357,358],{"class":115},"10\n",[101,360,362,365],{"class":103,"line":361},26,[101,363,364],{"class":107},"      responses",[101,366,124],{"class":111},[101,368,370,373],{"class":103,"line":369},27,[101,371,372],{"class":135},"        \"200\"",[101,374,124],{"class":111},[101,376,378,380,382],{"class":103,"line":377},28,[101,379,265],{"class":107},[101,381,112],{"class":111},[101,383,384],{"class":135},"Matching results.\n",[101,386,388,391],{"class":103,"line":387},29,[101,389,390],{"class":107},"          content",[101,392,124],{"class":111},[101,394,396,399],{"class":103,"line":395},30,[101,397,398],{"class":107},"            application\u002Fjson",[101,400,124],{"class":111},[101,402,404,407],{"class":103,"line":403},31,[101,405,406],{"class":107},"              schema",[101,408,124],{"class":111},[101,410,412,415,417],{"class":103,"line":411},32,[101,413,414],{"class":107},"                type",[101,416,112],{"class":111},[101,418,419],{"class":135},"object\n",[22,421,423],{"type":422},"warning",[12,424,425,426,430],{},"The hybrid endpoint currently has no authentication, so anyone you share the GPT\nwith can search that scraper's data. Only share GPTs for scrapers whose data you\nare comfortable exposing. See ",[16,427,429],{"href":428},"\u002Fdocs\u002Fdevelopers\u002Fauthentication","authentication","\nfor what is changing.",[34,432,434],{"id":433},"give-it-instructions","Give it instructions",[12,436,437,438,441],{},"In the GPT's ",[29,439,440],{},"Instructions",", tell it how to behave:",[92,443,448],{"className":444,"code":446,"language":447,"meta":97},[445],"language-text","You help people search live listings from acmehomes.co.uk. When asked about\nproperties, call the searchListings action with the user's request as the search\nquery. Summarise the results clearly, including price and location. If nothing\nmatches, say so.\n","text",[48,449,446],{"__ignoreMap":97},[34,451,453],{"id":452},"whats-next","What's next",[455,456,457,465],"card-group",{"cols":119},[458,459,462],"card",{"href":18,"icon":460,"title":461},"search","How hybrid search works",[12,463,464],{},"What the action is calling under the hood.",[458,466,470],{"href":467,"icon":468,"title":469},"\u002Fdocs\u002Fdevelopers\u002Fvercel-ai-sdk","sparkles","Build a real integration",[12,471,472],{},"For a product, wrap the endpoint in your own agent instead.",[474,475,476],"style",{},"html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}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);}",{"title":97,"searchDepth":127,"depth":127,"links":478},[479,480,481,482],{"id":36,"depth":119,"text":37},{"id":83,"depth":119,"text":84},{"id":433,"depth":119,"text":434},{"id":452,"depth":119,"text":453},"Give a custom GPT the power to search your scraper's live data, no code.","md","Connect your AI tools","bot",{},true,"\u002Fdocs\u002Fagents\u002Fchatgpt-custom-gpt",{"title":7,"description":483},"docs\u002Fagents\u002Fchatgpt-custom-gpt","agents","j4a9vvqq7PzvoLk_STRiATKXxD7kCTmfM8Xl_nnYsgo",{"id":495,"title":496,"badge":3,"body":497,"description":586,"extension":484,"group":587,"icon":588,"lastUpdated":3,"meta":589,"navigation":488,"order":104,"path":590,"popular":488,"publishedAt":3,"seo":591,"sidebarTitle":3,"stem":592,"tree":492,"__hash__":593},"docs\u002Fdocs\u002Fagents\u002Fquickstart.md","Quickstart",{"type":9,"value":498,"toc":581},[499,502,518,526,530,533,547,555,559,564,566],[12,500,501],{},"This tree is for two audiences:",[503,504,505,512],"ul",{},[506,507,508,511],"li",{},[29,509,510],{},"AI agents"," that want to read Trawley's documentation in a clean,\nmachine-friendly form to ground their answers.",[506,513,514,517],{},[29,515,516],{},"People"," who want to point a personal AI tool (like ChatGPT) at the data a\nTrawley scraper collects, without writing code.",[12,519,520,521,525],{},"If you are a developer building Trawley into your own product, the\n",[16,522,524],{"href":523},"\u002Fdocs\u002Fdevelopers\u002Fquickstart","Developers tree"," is where the API reference and\nintegration guides live.",[34,527,529],{"id":528},"for-agents-read-the-docs-as-text","For agents: read the docs as text",[12,531,532],{},"Every Trawley doc page is available as clean markdown, and the whole site is\nindexed in two artifacts at the site root:",[503,534,535,541],{},[506,536,537,540],{},[48,538,539],{},"https:\u002F\u002Ftrawley.ai\u002Fllms.txt"," — a curated index of every page.",[506,542,543,546],{},[48,544,545],{},"https:\u002F\u002Ftrawley.ai\u002Fllms-full.txt"," — the full text of every page in one file.",[12,548,549,550,554],{},"See ",[16,551,553],{"href":552},"\u002Fdocs\u002Fagents\u002Fllms-txt","llms.txt and friends"," for how to use them.",[34,556,558],{"id":557},"for-people-connect-your-ai-tool","For people: connect your AI tool",[12,560,561,562,51],{},"You can give a ChatGPT custom GPT the ability to search your scraper's live data,\nno code required. See ",[16,563,7],{"href":489},[34,565,453],{"id":452},[455,567,568,575],{"cols":119},[458,569,572],{"href":552,"icon":570,"title":571},"file-text","LLM-ready artifacts",[12,573,574],{},"The llms.txt index and per-page markdown.",[458,576,578],{"href":489,"icon":486,"title":577},"Connect ChatGPT",[12,579,580],{},"Point a custom GPT at your scraper.",{"title":97,"searchDepth":127,"depth":127,"links":582},[583,584,585],{"id":528,"depth":119,"text":529},{"id":557,"depth":119,"text":558},{"id":452,"depth":119,"text":453},"Connect your AI tools to Trawley, and let agents read Trawley docs directly.","Getting started","rocket",{},"\u002Fdocs\u002Fagents\u002Fquickstart",{"title":496,"description":586},"docs\u002Fagents\u002Fquickstart","AQQIcOQGReAxnwuh7ZYbDO1JaejbU6tg0Mn64AFJHjo",{"id":595,"title":596,"badge":3,"body":597,"description":1264,"extension":484,"group":1265,"icon":460,"lastUpdated":3,"meta":1266,"navigation":488,"order":104,"path":18,"popular":488,"publishedAt":3,"seo":1267,"sidebarTitle":3,"stem":1268,"tree":1269,"__hash__":1270},"docs\u002Fdocs\u002Fdevelopers\u002Fhybrid-search.md","Hybrid search",{"type":9,"value":598,"toc":1254},[599,602,623,626,630,636,641,717,926,930,1117,1184,1190,1195,1208,1211,1215,1229,1231,1251],[12,600,601],{},"Hybrid search is the endpoint you will reach for most. You send a natural\nlanguage query, and Trawley combines three techniques in a single call:",[603,604,605,611,617],"ol",{},[506,606,607,610],{},[29,608,609],{},"AI-generated structured filters"," turn precise constraints in your query\n(bedrooms, price, dates) into exact filters.",[506,612,613,616],{},[29,614,615],{},"Vector similarity"," matches fuzzy, semantic parts of the query (locations,\ndescriptions, names) by meaning, not exact words.",[506,618,619,622],{},[29,620,621],{},"Keyword matching"," catches literal term overlaps.",[12,624,625],{},"The result: \"3 bed houses near Kendal under £500k with a garden\" returns the\nright records without you writing any query logic.",[34,627,629],{"id":628},"request","Request",[92,631,634],{"className":632,"code":633,"language":447},[445],"GET https:\u002F\u002Fapi.trawley.ai\u002Fv1\u002Fscrapers\u002F{scraperId}\u002Fhybrid\n",[48,635,633],{"__ignoreMap":97},[637,638,640],"h3",{"id":639},"query-parameters","Query parameters",[642,643,644,663],"table",{},[645,646,647],"thead",{},[648,649,650,654,657,660],"tr",{},[651,652,653],"th",{},"Parameter",[651,655,656],{},"Type",[651,658,659],{},"Default",[651,661,662],{},"Description",[664,665,666,682,700],"tbody",{},[648,667,668,673,676,679],{},[669,670,671],"td",{},[48,672,460],{},[669,674,675],{},"string",[669,677,678],{},"required",[669,680,681],{},"The natural language query.",[648,683,684,689,692,697],{},[669,685,686],{},[48,687,688],{},"page",[669,690,691],{},"number",[669,693,694],{},[48,695,696],{},"1",[669,698,699],{},"Page of results to return.",[648,701,702,707,709,714],{},[669,703,704],{},[48,705,706],{},"take",[669,708,691],{},[669,710,711],{},[48,712,713],{},"10",[669,715,716],{},"Number of results per page.",[718,719,720,745,884],"code-group",{},[92,721,726],{"className":722,"code":723,"filename":724,"language":725,"meta":97,"style":97},"language-bash shiki shiki-themes github-light","curl \"https:\u002F\u002Fapi.trawley.ai\u002Fv1\u002Fscrapers\u002Fscr_8f2a1c9e\u002Fhybrid?\\\nsearch=3+bed+houses+with+a+garden&page=1&take=10\"\n","cURL","bash",[48,727,728,740],{"__ignoreMap":97},[101,729,730,734,737],{"class":103,"line":104},[101,731,733],{"class":732},"s7eDp","curl",[101,735,736],{"class":135}," \"https:\u002F\u002Fapi.trawley.ai\u002Fv1\u002Fscrapers\u002Fscr_8f2a1c9e\u002Fhybrid?",[101,738,739],{"class":115},"\\\n",[101,741,742],{"class":103,"line":119},[101,743,744],{"class":135},"search=3+bed+houses+with+a+garden&page=1&take=10\"\n",[92,746,751],{"className":747,"code":748,"filename":749,"language":750,"meta":97,"style":97},"language-js shiki shiki-themes github-light","const params = new URLSearchParams({\n  search: '3 bed houses with a garden',\n  page: '1',\n  take: '10',\n})\nconst res = await fetch(\n  `https:\u002F\u002Fapi.trawley.ai\u002Fv1\u002Fscrapers\u002Fscr_8f2a1c9e\u002Fhybrid?${params}`,\n)\nconst { data, pagination, meta } = await res.json()\n","JavaScript","js",[48,752,753,774,785,795,805,810,828,841,846],{"__ignoreMap":97},[101,754,755,759,762,765,768,771],{"class":103,"line":104},[101,756,758],{"class":757},"sD7c4","const",[101,760,761],{"class":115}," params",[101,763,764],{"class":757}," =",[101,766,767],{"class":757}," new",[101,769,770],{"class":732}," URLSearchParams",[101,772,773],{"class":111},"({\n",[101,775,776,779,782],{"class":103,"line":119},[101,777,778],{"class":111},"  search: ",[101,780,781],{"class":135},"'3 bed houses with a garden'",[101,783,784],{"class":111},",\n",[101,786,787,790,793],{"class":103,"line":127},[101,788,789],{"class":111},"  page: ",[101,791,792],{"class":135},"'1'",[101,794,784],{"class":111},[101,796,797,800,803],{"class":103,"line":139},[101,798,799],{"class":111},"  take: ",[101,801,802],{"class":135},"'10'",[101,804,784],{"class":111},[101,806,807],{"class":103,"line":150},[101,808,809],{"class":111},"})\n",[101,811,812,814,817,819,822,825],{"class":103,"line":158},[101,813,758],{"class":757},[101,815,816],{"class":115}," res",[101,818,764],{"class":757},[101,820,821],{"class":757}," await",[101,823,824],{"class":732}," fetch",[101,826,827],{"class":111},"(\n",[101,829,830,833,836,839],{"class":103,"line":172},[101,831,832],{"class":135},"  `https:\u002F\u002Fapi.trawley.ai\u002Fv1\u002Fscrapers\u002Fscr_8f2a1c9e\u002Fhybrid?${",[101,834,835],{"class":111},"params",[101,837,838],{"class":135},"}`",[101,840,784],{"class":111},[101,842,843],{"class":103,"line":180},[101,844,845],{"class":111},")\n",[101,847,848,850,853,856,859,862,864,867,870,873,875,878,881],{"class":103,"line":188},[101,849,758],{"class":757},[101,851,852],{"class":111}," { ",[101,854,855],{"class":115},"data",[101,857,858],{"class":111},", ",[101,860,861],{"class":115},"pagination",[101,863,858],{"class":111},[101,865,866],{"class":115},"meta",[101,868,869],{"class":111}," } ",[101,871,872],{"class":757},"=",[101,874,821],{"class":757},[101,876,877],{"class":111}," res.",[101,879,880],{"class":732},"json",[101,882,883],{"class":111},"()\n",[92,885,890],{"className":886,"code":887,"filename":888,"language":889,"meta":97,"style":97},"language-python shiki shiki-themes github-light","import requests\n\nres = requests.get(\n    \"https:\u002F\u002Fapi.trawley.ai\u002Fv1\u002Fscrapers\u002Fscr_8f2a1c9e\u002Fhybrid\",\n    params={\"search\": \"3 bed houses with a garden\", \"page\": 1, \"take\": 10},\n)\nbody = res.json()\n","Python","python",[48,891,892,897,902,907,912,917,921],{"__ignoreMap":97},[101,893,894],{"class":103,"line":104},[101,895,896],{},"import requests\n",[101,898,899],{"class":103,"line":119},[101,900,901],{"emptyLinePlaceholder":488},"\n",[101,903,904],{"class":103,"line":127},[101,905,906],{},"res = requests.get(\n",[101,908,909],{"class":103,"line":139},[101,910,911],{},"    \"https:\u002F\u002Fapi.trawley.ai\u002Fv1\u002Fscrapers\u002Fscr_8f2a1c9e\u002Fhybrid\",\n",[101,913,914],{"class":103,"line":150},[101,915,916],{},"    params={\"search\": \"3 bed houses with a garden\", \"page\": 1, \"take\": 10},\n",[101,918,919],{"class":103,"line":158},[101,920,845],{},[101,922,923],{"class":103,"line":172},[101,924,925],{},"body = res.json()\n",[34,927,929],{"id":928},"response","Response",[92,931,934],{"className":932,"code":933,"language":880,"meta":97,"style":97},"language-json shiki shiki-themes github-light","{\n  \"data\": [\n    {\n      \"title\": \"3 bed semi-detached house\",\n      \"price\": 425000,\n      \"bedrooms\": 3,\n      \"location\": \"Kendal\",\n      \"url\": \"https:\u002F\u002Facmehomes.co.uk\u002Flistings\u002F3-bed-semi-kendal\"\n    }\n  ],\n  \"pagination\": {\n    \"total\": 18,\n    \"page\": 1,\n    \"take\": 10,\n    \"totalPages\": 2,\n    \"hasMore\": true\n  },\n  \"meta\": {\n    \"filter\": \"bedrooms = 3\"\n  }\n}\n",[48,935,936,941,949,954,966,978,990,1002,1012,1017,1022,1030,1042,1053,1064,1076,1085,1090,1097,1107,1112],{"__ignoreMap":97},[101,937,938],{"class":103,"line":104},[101,939,940],{"class":111},"{\n",[101,942,943,946],{"class":103,"line":119},[101,944,945],{"class":115},"  \"data\"",[101,947,948],{"class":111},": [\n",[101,950,951],{"class":103,"line":127},[101,952,953],{"class":111},"    {\n",[101,955,956,959,961,964],{"class":103,"line":139},[101,957,958],{"class":115},"      \"title\"",[101,960,112],{"class":111},[101,962,963],{"class":135},"\"3 bed semi-detached house\"",[101,965,784],{"class":111},[101,967,968,971,973,976],{"class":103,"line":150},[101,969,970],{"class":115},"      \"price\"",[101,972,112],{"class":111},[101,974,975],{"class":115},"425000",[101,977,784],{"class":111},[101,979,980,983,985,988],{"class":103,"line":158},[101,981,982],{"class":115},"      \"bedrooms\"",[101,984,112],{"class":111},[101,986,987],{"class":115},"3",[101,989,784],{"class":111},[101,991,992,995,997,1000],{"class":103,"line":172},[101,993,994],{"class":115},"      \"location\"",[101,996,112],{"class":111},[101,998,999],{"class":135},"\"Kendal\"",[101,1001,784],{"class":111},[101,1003,1004,1007,1009],{"class":103,"line":180},[101,1005,1006],{"class":115},"      \"url\"",[101,1008,112],{"class":111},[101,1010,1011],{"class":135},"\"https:\u002F\u002Facmehomes.co.uk\u002Flistings\u002F3-bed-semi-kendal\"\n",[101,1013,1014],{"class":103,"line":188},[101,1015,1016],{"class":111},"    }\n",[101,1018,1019],{"class":103,"line":196},[101,1020,1021],{"class":111},"  ],\n",[101,1023,1024,1027],{"class":103,"line":207},[101,1025,1026],{"class":115},"  \"pagination\"",[101,1028,1029],{"class":111},": {\n",[101,1031,1032,1035,1037,1040],{"class":103,"line":218},[101,1033,1034],{"class":115},"    \"total\"",[101,1036,112],{"class":111},[101,1038,1039],{"class":115},"18",[101,1041,784],{"class":111},[101,1043,1044,1047,1049,1051],{"class":103,"line":226},[101,1045,1046],{"class":115},"    \"page\"",[101,1048,112],{"class":111},[101,1050,696],{"class":115},[101,1052,784],{"class":111},[101,1054,1055,1058,1060,1062],{"class":103,"line":240},[101,1056,1057],{"class":115},"    \"take\"",[101,1059,112],{"class":111},[101,1061,713],{"class":115},[101,1063,784],{"class":111},[101,1065,1066,1069,1071,1074],{"class":103,"line":251},[101,1067,1068],{"class":115},"    \"totalPages\"",[101,1070,112],{"class":111},[101,1072,1073],{"class":115},"2",[101,1075,784],{"class":111},[101,1077,1078,1081,1083],{"class":103,"line":262},[101,1079,1080],{"class":115},"    \"hasMore\"",[101,1082,112],{"class":111},[101,1084,259],{"class":115},[101,1086,1087],{"class":103,"line":273},[101,1088,1089],{"class":111},"  },\n",[101,1091,1092,1095],{"class":103,"line":281},[101,1093,1094],{"class":115},"  \"meta\"",[101,1096,1029],{"class":111},[101,1098,1099,1102,1104],{"class":103,"line":292},[101,1100,1101],{"class":115},"    \"filter\"",[101,1103,112],{"class":111},[101,1105,1106],{"class":135},"\"bedrooms = 3\"\n",[101,1108,1109],{"class":103,"line":304},[101,1110,1111],{"class":111},"  }\n",[101,1113,1114],{"class":103,"line":313},[101,1115,1116],{"class":111},"}\n",[642,1118,1119,1128],{},[645,1120,1121],{},[648,1122,1123,1126],{},[651,1124,1125],{},"Field",[651,1127,662],{},[664,1129,1130,1139,1149,1161,1174],{},[648,1131,1132,1136],{},[669,1133,1134],{},[48,1135,855],{},[669,1137,1138],{},"Array of matching records. Each record's fields are the ones you defined on the scraper.",[648,1140,1141,1146],{},[669,1142,1143],{},[48,1144,1145],{},"pagination.total",[669,1147,1148],{},"Estimated total number of matches across all pages.",[648,1150,1151,1156],{},[669,1152,1153],{},[48,1154,1155],{},"pagination.totalPages",[669,1157,1158,1159,51],{},"Total pages given the current ",[48,1160,706],{},[648,1162,1163,1168],{},[669,1164,1165],{},[48,1166,1167],{},"pagination.hasMore",[669,1169,1170,1173],{},[48,1171,1172],{},"true"," when more pages remain after this one.",[648,1175,1176,1181],{},[669,1177,1178],{},[48,1179,1180],{},"meta.filter",[669,1182,1183],{},"The structured filter Trawley's AI derived from your query.",[34,1185,1187,1188],{"id":1186},"debugging-with-metafilter","Debugging with ",[48,1189,1180],{},[12,1191,1192,1194],{},[48,1193,1180],{}," shows the exact structured filter the AI built from your natural\nlanguage query before similarity ranking. It is the single most useful field\nfor understanding why you got the results you did.",[22,1196,1198],{"type":1197},"tip",[12,1199,1200,1201,1203,1204,1207],{},"If a query returns too few or unexpected results, check ",[48,1202,1180],{},". A query\nlike \"cheap flats\" might produce no filter at all (price thresholds are fuzzy),\nwhile \"flats under £200k\" produces ",[48,1205,1206],{},"price \u003C 200000",". Seeing the filter tells you\nwhether the constraint was interpreted as exact or left to similarity search.",[12,1209,1210],{},"Trawley deliberately leaves fuzzy aspects (approximate locations, names, free\ntext) out of the filter and resolves them through vector similarity instead, so\nyou do not need exact-match values for them.",[34,1212,1214],{"id":1213},"notes","Notes",[503,1216,1217,1220,1223],{},[506,1218,1219],{},"Only fields with a non-text data type (number, date, boolean) are eligible for\nstructured filters. Text fields are always matched by similarity.",[506,1221,1222],{},"Results come from the most recent completed scrape run.",[506,1224,1225,1226,1228],{},"If the scraper has never completed a run, ",[48,1227,855],{}," is an empty array.",[34,1230,453],{"id":452},[455,1232,1233,1245],{"cols":119},[458,1234,1238],{"href":1235,"icon":1236,"title":1237},"\u002Fdocs\u002Fdevelopers\u002Fapi-overview","gauge","Rate limits & errors",[12,1239,1240,1241,1244],{},"What a ",[48,1242,1243],{},"429"," looks like and how quotas work.",[458,1246,1248],{"href":467,"icon":468,"title":1247},"Use it as an agent tool",[12,1249,1250],{},"Wrap this endpoint as a function your LLM can call.",[474,1252,1253],{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}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 .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}",{"title":97,"searchDepth":127,"depth":127,"links":1255},[1256,1259,1260,1262,1263],{"id":628,"depth":119,"text":629,"children":1257},[1258],{"id":639,"depth":127,"text":640},{"id":928,"depth":119,"text":929},{"id":1186,"depth":119,"text":1261},"Debugging with meta.filter",{"id":1213,"depth":119,"text":1214},{"id":452,"depth":119,"text":453},"The recommended endpoint — natural language search combining AI filters, vector similarity, and keyword matching.","Search API",{},{"title":596,"description":1264},"docs\u002Fdevelopers\u002Fhybrid-search","developers","19JeFKP2eEz8im9jEGKSgLCKZ6ZiPyd_FmaYzB7QszI",{"id":1272,"title":496,"badge":3,"body":1273,"description":1618,"extension":484,"group":587,"icon":588,"lastUpdated":3,"meta":1619,"navigation":488,"order":104,"path":523,"popular":488,"publishedAt":3,"seo":1620,"sidebarTitle":3,"stem":1621,"tree":1269,"__hash__":1622},"docs\u002Fdocs\u002Fdevelopers\u002Fquickstart.md",{"type":9,"value":1274,"toc":1614},[1275,1278,1281,1291,1293,1442,1445,1577,1579,1582,1591,1593,1611],[12,1276,1277],{},"Trawley turns any website into a natural language search API. You build a\nscraper once in the dashboard, and Trawley keeps it indexed so your code can\nask questions like \"3 bed houses under £500k with parking\" and get structured\nJSON back.",[12,1279,1280],{},"This quickstart gets you from a finished scraper to your first API response.",[22,1282,1283],{"type":24},[12,1284,1285,1286,1290],{},"You need a scraper that has run at least once. If you have not built one yet,\nstart with the ",[16,1287,1289],{"href":1288},"\u002Fdocs\u002Fusers\u002Fthe-setup-wizard","no-code setup wizard",", then come\nback here.",[34,1292,37],{"id":36},[36,1294,1295,1311],{},[41,1296,1298,1305],{"title":1297},"Grab your scraper ID",[12,1299,1300,1301,1304],{},"Open your scraper in the dashboard at ",[48,1302,1303],{},"app.trawley.ai",". The ID is the last\nsegment of the URL:",[92,1306,1309],{"className":1307,"code":1308,"language":447},[445],"https:\u002F\u002Fapp.trawley.ai\u002Fscrapers\u002Fscr_8f2a1c9e\n                                 ^^^^^^^^^^^^\n",[48,1310,1308],{"__ignoreMap":97},[41,1312,1314,1323],{"title":1313},"Call the search endpoint",[12,1315,1316,1317,1319,1320,1322],{},"The recommended endpoint is ",[29,1318,19],{},". Pass a natural language query in\nthe ",[48,1321,460],{}," parameter:",[718,1324,1325,1337,1407],{},[92,1326,1328],{"className":722,"code":1327,"filename":724,"language":725,"meta":97,"style":97},"curl \"https:\u002F\u002Fapi.trawley.ai\u002Fv1\u002Fscrapers\u002Fscr_8f2a1c9e\u002Fhybrid?search=3+bed+houses+with+a+garden\"\n",[48,1329,1330],{"__ignoreMap":97},[101,1331,1332,1334],{"class":103,"line":104},[101,1333,733],{"class":732},[101,1335,1336],{"class":135}," \"https:\u002F\u002Fapi.trawley.ai\u002Fv1\u002Fscrapers\u002Fscr_8f2a1c9e\u002Fhybrid?search=3+bed+houses+with+a+garden\"\n",[92,1338,1340],{"className":747,"code":1339,"filename":749,"language":750,"meta":97,"style":97},"const res = await fetch(\n  'https:\u002F\u002Fapi.trawley.ai\u002Fv1\u002Fscrapers\u002Fscr_8f2a1c9e\u002Fhybrid?' +\n    new URLSearchParams({ search: '3 bed houses with a garden' }),\n)\nconst { data, pagination } = await res.json()\n",[48,1341,1342,1356,1364,1379,1383],{"__ignoreMap":97},[101,1343,1344,1346,1348,1350,1352,1354],{"class":103,"line":104},[101,1345,758],{"class":757},[101,1347,816],{"class":115},[101,1349,764],{"class":757},[101,1351,821],{"class":757},[101,1353,824],{"class":732},[101,1355,827],{"class":111},[101,1357,1358,1361],{"class":103,"line":119},[101,1359,1360],{"class":135},"  'https:\u002F\u002Fapi.trawley.ai\u002Fv1\u002Fscrapers\u002Fscr_8f2a1c9e\u002Fhybrid?'",[101,1362,1363],{"class":757}," +\n",[101,1365,1366,1369,1371,1374,1376],{"class":103,"line":127},[101,1367,1368],{"class":757},"    new",[101,1370,770],{"class":732},[101,1372,1373],{"class":111},"({ search: ",[101,1375,781],{"class":135},[101,1377,1378],{"class":111}," }),\n",[101,1380,1381],{"class":103,"line":139},[101,1382,845],{"class":111},[101,1384,1385,1387,1389,1391,1393,1395,1397,1399,1401,1403,1405],{"class":103,"line":150},[101,1386,758],{"class":757},[101,1388,852],{"class":111},[101,1390,855],{"class":115},[101,1392,858],{"class":111},[101,1394,861],{"class":115},[101,1396,869],{"class":111},[101,1398,872],{"class":757},[101,1400,821],{"class":757},[101,1402,877],{"class":111},[101,1404,880],{"class":732},[101,1406,883],{"class":111},[92,1408,1410],{"className":886,"code":1409,"filename":888,"language":889,"meta":97,"style":97},"import requests\n\nres = requests.get(\n    \"https:\u002F\u002Fapi.trawley.ai\u002Fv1\u002Fscrapers\u002Fscr_8f2a1c9e\u002Fhybrid\",\n    params={\"search\": \"3 bed houses with a garden\"},\n)\ndata = res.json()[\"data\"]\n",[48,1411,1412,1416,1420,1424,1428,1433,1437],{"__ignoreMap":97},[101,1413,1414],{"class":103,"line":104},[101,1415,896],{},[101,1417,1418],{"class":103,"line":119},[101,1419,901],{"emptyLinePlaceholder":488},[101,1421,1422],{"class":103,"line":127},[101,1423,906],{},[101,1425,1426],{"class":103,"line":139},[101,1427,911],{},[101,1429,1430],{"class":103,"line":150},[101,1431,1432],{},"    params={\"search\": \"3 bed houses with a garden\"},\n",[101,1434,1435],{"class":103,"line":158},[101,1436,845],{},[101,1438,1439],{"class":103,"line":172},[101,1440,1441],{},"data = res.json()[\"data\"]\n",[12,1443,1444],{},"::",[41,1446,1448,1451],{"title":1447},"Read the results",[12,1449,1450],{},"You get back structured records matching the query, plus pagination metadata:",[92,1452,1454],{"className":932,"code":1453,"language":880,"meta":97,"style":97},"{\n  \"data\": [\n    { \"title\": \"3 bed semi in Kendal\", \"price\": 425000, \"bedrooms\": 3 }\n  ],\n  \"pagination\": { \"total\": 18, \"page\": 1, \"take\": 10, \"totalPages\": 2, \"hasMore\": true },\n  \"meta\": { \"filter\": \"bedrooms = 3\" }\n}\n",[48,1455,1456,1460,1466,1500,1504,1557,1573],{"__ignoreMap":97},[101,1457,1458],{"class":103,"line":104},[101,1459,940],{"class":111},[101,1461,1462,1464],{"class":103,"line":119},[101,1463,945],{"class":115},[101,1465,948],{"class":111},[101,1467,1468,1471,1474,1476,1479,1481,1484,1486,1488,1490,1493,1495,1497],{"class":103,"line":127},[101,1469,1470],{"class":111},"    { ",[101,1472,1473],{"class":115},"\"title\"",[101,1475,112],{"class":111},[101,1477,1478],{"class":135},"\"3 bed semi in Kendal\"",[101,1480,858],{"class":111},[101,1482,1483],{"class":115},"\"price\"",[101,1485,112],{"class":111},[101,1487,975],{"class":115},[101,1489,858],{"class":111},[101,1491,1492],{"class":115},"\"bedrooms\"",[101,1494,112],{"class":111},[101,1496,987],{"class":115},[101,1498,1499],{"class":111}," }\n",[101,1501,1502],{"class":103,"line":139},[101,1503,1021],{"class":111},[101,1505,1506,1508,1511,1514,1516,1518,1520,1523,1525,1527,1529,1532,1534,1536,1538,1541,1543,1545,1547,1550,1552,1554],{"class":103,"line":150},[101,1507,1026],{"class":115},[101,1509,1510],{"class":111},": { ",[101,1512,1513],{"class":115},"\"total\"",[101,1515,112],{"class":111},[101,1517,1039],{"class":115},[101,1519,858],{"class":111},[101,1521,1522],{"class":115},"\"page\"",[101,1524,112],{"class":111},[101,1526,696],{"class":115},[101,1528,858],{"class":111},[101,1530,1531],{"class":115},"\"take\"",[101,1533,112],{"class":111},[101,1535,713],{"class":115},[101,1537,858],{"class":111},[101,1539,1540],{"class":115},"\"totalPages\"",[101,1542,112],{"class":111},[101,1544,1073],{"class":115},[101,1546,858],{"class":111},[101,1548,1549],{"class":115},"\"hasMore\"",[101,1551,112],{"class":111},[101,1553,1172],{"class":115},[101,1555,1556],{"class":111}," },\n",[101,1558,1559,1561,1563,1566,1568,1571],{"class":103,"line":158},[101,1560,1094],{"class":115},[101,1562,1510],{"class":111},[101,1564,1565],{"class":115},"\"filter\"",[101,1567,112],{"class":111},[101,1569,1570],{"class":135},"\"bedrooms = 3\"",[101,1572,1499],{"class":111},[101,1574,1575],{"class":103,"line":172},[101,1576,1116],{"class":111},[12,1578,1444],{},[12,1580,1581],{},"That is the whole loop: one GET request, structured results, no HTML parsing.",[22,1583,1584],{"type":422},[12,1585,1586,1587,1590],{},"The API is currently reached by scraper ID and does not yet require an API key.\nAuthentication is coming. See the ",[16,1588,1589],{"href":1235},"API overview","\nfor what that means for you today.",[34,1592,453],{"id":452},[455,1594,1595,1604],{"cols":119},[458,1596,1598],{"href":18,"icon":460,"title":1597},"Hybrid search reference",[12,1599,1600,1601,1603],{},"Every query parameter, the full response shape, and how ",[48,1602,1180],{}," works.",[458,1605,1608],{"href":1606,"icon":468,"title":1607},"\u002Fdocs\u002Fdevelopers\u002Ftools-overview","Wire it into an agent",[12,1609,1610],{},"Expose Trawley as a tool your LLM can call. Start with the Vercel AI SDK.",[474,1612,1613],{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}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 .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}",{"title":97,"searchDepth":127,"depth":127,"links":1615},[1616,1617],{"id":36,"depth":119,"text":37},{"id":452,"depth":119,"text":453},"Query a Trawley scraper from your code in five minutes.",{},{"title":496,"description":1618},"docs\u002Fdevelopers\u002Fquickstart","8AQ_IRBTZIqWAFFdCzF7mF6Pxjm88-qtYvzn4LZvGvg",{"id":1624,"title":1625,"badge":3,"body":1626,"description":2400,"extension":484,"group":2401,"icon":468,"lastUpdated":3,"meta":2402,"navigation":488,"order":119,"path":467,"popular":488,"publishedAt":3,"seo":2403,"sidebarTitle":3,"stem":2404,"tree":1269,"__hash__":2405},"docs\u002Fdocs\u002Fdevelopers\u002Fvercel-ai-sdk.md","Vercel AI SDK",{"type":9,"value":1627,"toc":2391},[1628,1644,1648,1660,1682,1686,1696,2004,2022,2026,2037,2164,2168,2210,2214,2224,2332,2336,2369,2371,2388],[12,1629,1630,1631,1636,1637,1640,1641,1643],{},"This guide wires a Trawley scraper into an agent built with the\n",[16,1632,1625],{"href":1633,"rel":1634},"https:\u002F\u002Fsdk.vercel.ai",[1635],"nofollow",". The model gets one tool, ",[48,1638,1639],{},"searchListings",",\nthat calls Trawley's ",[16,1642,19],{"href":18}," endpoint.\nWhen a user asks a question about your data, the model calls the tool, reads the\nstructured results, and answers.",[34,1645,1647],{"id":1646},"prerequisites","Prerequisites",[503,1649,1650,1653],{},[506,1651,1652],{},"A Trawley scraper that has completed at least one run, and its scraper ID.",[506,1654,1655,1656,1659],{},"An AI SDK project with a model provider configured (this example uses\n",[48,1657,1658],{},"@ai-sdk\u002Fopenai",", but any provider works).",[92,1661,1663],{"className":722,"code":1662,"language":725,"meta":97,"style":97},"npm install ai @ai-sdk\u002Fopenai zod\n",[48,1664,1665],{"__ignoreMap":97},[101,1666,1667,1670,1673,1676,1679],{"class":103,"line":104},[101,1668,1669],{"class":732},"npm",[101,1671,1672],{"class":135}," install",[101,1674,1675],{"class":135}," ai",[101,1677,1678],{"class":135}," @ai-sdk\u002Fopenai",[101,1680,1681],{"class":135}," zod\n",[34,1683,1685],{"id":1684},"define-the-tool","Define the tool",[12,1687,1688,1689,1692,1693,51],{},"The tool has one input, ",[48,1690,1691],{},"query",", and calls the hybrid endpoint inside ",[48,1694,1695],{},"execute",[92,1697,1701],{"className":1698,"code":1699,"language":1700,"meta":97,"style":97},"language-ts shiki shiki-themes github-light","import { tool } from 'ai'\nimport { z } from 'zod'\n\nconst TRAWLEY_SCRAPER_ID = 'scr_8f2a1c9e'\n\nexport const searchListings = tool({\n  description:\n    'Search live property listings from acmehomes.co.uk. Accepts a natural ' +\n    'language query; constraints like price, bedrooms, or date are understood. ' +\n    'Returns structured records. Use whenever the user asks about specific ' +\n    'listings, availability, or current data.',\n  inputSchema: z.object({\n    query: z\n      .string()\n      .describe('A natural language description of what to find, e.g. \"3 bed houses under £500k with a garden\"'),\n  }),\n  execute: async ({ query }) => {\n    const params = new URLSearchParams({ search: query, take: '10' })\n    const res = await fetch(\n      `https:\u002F\u002Fapi.trawley.ai\u002Fv1\u002Fscrapers\u002F${TRAWLEY_SCRAPER_ID}\u002Fhybrid?${params}`,\n    )\n    if (!res.ok) {\n      return { error: `Search failed with status ${res.status}` }\n    }\n    const { data } = await res.json()\n    return { results: data }\n  },\n})\n","ts",[48,1702,1703,1717,1729,1733,1745,1749,1767,1772,1779,1786,1793,1800,1810,1815,1824,1840,1845,1870,1891,1905,1922,1927,1941,1964,1968,1988,1996,2000],{"__ignoreMap":97},[101,1704,1705,1708,1711,1714],{"class":103,"line":104},[101,1706,1707],{"class":757},"import",[101,1709,1710],{"class":111}," { tool } ",[101,1712,1713],{"class":757},"from",[101,1715,1716],{"class":135}," 'ai'\n",[101,1718,1719,1721,1724,1726],{"class":103,"line":119},[101,1720,1707],{"class":757},[101,1722,1723],{"class":111}," { z } ",[101,1725,1713],{"class":757},[101,1727,1728],{"class":135}," 'zod'\n",[101,1730,1731],{"class":103,"line":127},[101,1732,901],{"emptyLinePlaceholder":488},[101,1734,1735,1737,1740,1742],{"class":103,"line":139},[101,1736,758],{"class":757},[101,1738,1739],{"class":115}," TRAWLEY_SCRAPER_ID",[101,1741,764],{"class":757},[101,1743,1744],{"class":135}," 'scr_8f2a1c9e'\n",[101,1746,1747],{"class":103,"line":150},[101,1748,901],{"emptyLinePlaceholder":488},[101,1750,1751,1754,1757,1760,1762,1765],{"class":103,"line":158},[101,1752,1753],{"class":757},"export",[101,1755,1756],{"class":757}," const",[101,1758,1759],{"class":115}," searchListings",[101,1761,764],{"class":757},[101,1763,1764],{"class":732}," tool",[101,1766,773],{"class":111},[101,1768,1769],{"class":103,"line":172},[101,1770,1771],{"class":111},"  description:\n",[101,1773,1774,1777],{"class":103,"line":180},[101,1775,1776],{"class":135},"    'Search live property listings from acmehomes.co.uk. Accepts a natural '",[101,1778,1363],{"class":757},[101,1780,1781,1784],{"class":103,"line":188},[101,1782,1783],{"class":135},"    'language query; constraints like price, bedrooms, or date are understood. '",[101,1785,1363],{"class":757},[101,1787,1788,1791],{"class":103,"line":196},[101,1789,1790],{"class":135},"    'Returns structured records. Use whenever the user asks about specific '",[101,1792,1363],{"class":757},[101,1794,1795,1798],{"class":103,"line":207},[101,1796,1797],{"class":135},"    'listings, availability, or current data.'",[101,1799,784],{"class":111},[101,1801,1802,1805,1808],{"class":103,"line":218},[101,1803,1804],{"class":111},"  inputSchema: z.",[101,1806,1807],{"class":732},"object",[101,1809,773],{"class":111},[101,1811,1812],{"class":103,"line":226},[101,1813,1814],{"class":111},"    query: z\n",[101,1816,1817,1820,1822],{"class":103,"line":240},[101,1818,1819],{"class":111},"      .",[101,1821,675],{"class":732},[101,1823,883],{"class":111},[101,1825,1826,1828,1831,1834,1837],{"class":103,"line":251},[101,1827,1819],{"class":111},[101,1829,1830],{"class":732},"describe",[101,1832,1833],{"class":111},"(",[101,1835,1836],{"class":135},"'A natural language description of what to find, e.g. \"3 bed houses under £500k with a garden\"'",[101,1838,1839],{"class":111},"),\n",[101,1841,1842],{"class":103,"line":262},[101,1843,1844],{"class":111},"  }),\n",[101,1846,1847,1850,1852,1855,1858,1861,1864,1867],{"class":103,"line":273},[101,1848,1849],{"class":732},"  execute",[101,1851,112],{"class":111},[101,1853,1854],{"class":757},"async",[101,1856,1857],{"class":111}," ({ ",[101,1859,1691],{"class":1860},"sqxcx",[101,1862,1863],{"class":111}," }) ",[101,1865,1866],{"class":757},"=>",[101,1868,1869],{"class":111}," {\n",[101,1871,1872,1875,1877,1879,1881,1883,1886,1888],{"class":103,"line":281},[101,1873,1874],{"class":757},"    const",[101,1876,761],{"class":115},[101,1878,764],{"class":757},[101,1880,767],{"class":757},[101,1882,770],{"class":732},[101,1884,1885],{"class":111},"({ search: query, take: ",[101,1887,802],{"class":135},[101,1889,1890],{"class":111}," })\n",[101,1892,1893,1895,1897,1899,1901,1903],{"class":103,"line":292},[101,1894,1874],{"class":757},[101,1896,816],{"class":115},[101,1898,764],{"class":757},[101,1900,821],{"class":757},[101,1902,824],{"class":732},[101,1904,827],{"class":111},[101,1906,1907,1910,1913,1916,1918,1920],{"class":103,"line":304},[101,1908,1909],{"class":135},"      `https:\u002F\u002Fapi.trawley.ai\u002Fv1\u002Fscrapers\u002F${",[101,1911,1912],{"class":115},"TRAWLEY_SCRAPER_ID",[101,1914,1915],{"class":135},"}\u002Fhybrid?${",[101,1917,835],{"class":111},[101,1919,838],{"class":135},[101,1921,784],{"class":111},[101,1923,1924],{"class":103,"line":313},[101,1925,1926],{"class":111},"    )\n",[101,1928,1929,1932,1935,1938],{"class":103,"line":323},[101,1930,1931],{"class":757},"    if",[101,1933,1934],{"class":111}," (",[101,1936,1937],{"class":757},"!",[101,1939,1940],{"class":111},"res.ok) {\n",[101,1942,1943,1946,1949,1952,1955,1957,1960,1962],{"class":103,"line":333},[101,1944,1945],{"class":757},"      return",[101,1947,1948],{"class":111}," { error: ",[101,1950,1951],{"class":135},"`Search failed with status ${",[101,1953,1954],{"class":111},"res",[101,1956,51],{"class":135},[101,1958,1959],{"class":111},"status",[101,1961,838],{"class":135},[101,1963,1499],{"class":111},[101,1965,1966],{"class":103,"line":340},[101,1967,1016],{"class":111},[101,1969,1970,1972,1974,1976,1978,1980,1982,1984,1986],{"class":103,"line":350},[101,1971,1874],{"class":757},[101,1973,852],{"class":111},[101,1975,855],{"class":115},[101,1977,869],{"class":111},[101,1979,872],{"class":757},[101,1981,821],{"class":757},[101,1983,877],{"class":111},[101,1985,880],{"class":732},[101,1987,883],{"class":111},[101,1989,1990,1993],{"class":103,"line":361},[101,1991,1992],{"class":757},"    return",[101,1994,1995],{"class":111}," { results: data }\n",[101,1997,1998],{"class":103,"line":369},[101,1999,1089],{"class":111},[101,2001,2002],{"class":103,"line":377},[101,2003,809],{"class":111},[22,2005,2007],{"type":2006},"note",[12,2008,2009,2010,2013,2014,2017,2018,2021],{},"The AI SDK uses ",[48,2011,2012],{},"inputSchema"," (not ",[48,2015,2016],{},"parameters",") to describe a tool's input.\nThe ",[48,2019,2020],{},"describe()"," text on each field is sent to the model, so spend a sentence\nmaking it clear.",[34,2023,2025],{"id":2024},"give-it-to-the-model","Give it to the model",[12,2027,2028,2029,2032,2033,2036],{},"Pass the tool to ",[48,2030,2031],{},"generateText"," and let the model run. ",[48,2034,2035],{},"stopWhen: stepCountIs(5)","\nlets the model call the tool and then continue to a final answer in the same\ncall.",[92,2038,2040],{"className":1698,"code":2039,"language":1700,"meta":97,"style":97},"import { generateText, stepCountIs } from 'ai'\nimport { openai } from '@ai-sdk\u002Fopenai'\nimport { searchListings } from '.\u002Fsearch-listings'\n\nconst { text } = await generateText({\n  model: openai('gpt-4.1'),\n  tools: { searchListings },\n  stopWhen: stepCountIs(5),\n  prompt: 'Find me a 3 bedroom house near Kendal with a garden under £500k.',\n})\n\nconsole.log(text)\n",[48,2041,2042,2053,2065,2077,2081,2100,2115,2120,2135,2145,2149,2153],{"__ignoreMap":97},[101,2043,2044,2046,2049,2051],{"class":103,"line":104},[101,2045,1707],{"class":757},[101,2047,2048],{"class":111}," { generateText, stepCountIs } ",[101,2050,1713],{"class":757},[101,2052,1716],{"class":135},[101,2054,2055,2057,2060,2062],{"class":103,"line":119},[101,2056,1707],{"class":757},[101,2058,2059],{"class":111}," { openai } ",[101,2061,1713],{"class":757},[101,2063,2064],{"class":135}," '@ai-sdk\u002Fopenai'\n",[101,2066,2067,2069,2072,2074],{"class":103,"line":127},[101,2068,1707],{"class":757},[101,2070,2071],{"class":111}," { searchListings } ",[101,2073,1713],{"class":757},[101,2075,2076],{"class":135}," '.\u002Fsearch-listings'\n",[101,2078,2079],{"class":103,"line":139},[101,2080,901],{"emptyLinePlaceholder":488},[101,2082,2083,2085,2087,2089,2091,2093,2095,2098],{"class":103,"line":150},[101,2084,758],{"class":757},[101,2086,852],{"class":111},[101,2088,447],{"class":115},[101,2090,869],{"class":111},[101,2092,872],{"class":757},[101,2094,821],{"class":757},[101,2096,2097],{"class":732}," generateText",[101,2099,773],{"class":111},[101,2101,2102,2105,2108,2110,2113],{"class":103,"line":158},[101,2103,2104],{"class":111},"  model: ",[101,2106,2107],{"class":732},"openai",[101,2109,1833],{"class":111},[101,2111,2112],{"class":135},"'gpt-4.1'",[101,2114,1839],{"class":111},[101,2116,2117],{"class":103,"line":172},[101,2118,2119],{"class":111},"  tools: { searchListings },\n",[101,2121,2122,2125,2128,2130,2133],{"class":103,"line":180},[101,2123,2124],{"class":111},"  stopWhen: ",[101,2126,2127],{"class":732},"stepCountIs",[101,2129,1833],{"class":111},[101,2131,2132],{"class":115},"5",[101,2134,1839],{"class":111},[101,2136,2137,2140,2143],{"class":103,"line":188},[101,2138,2139],{"class":111},"  prompt: ",[101,2141,2142],{"class":135},"'Find me a 3 bedroom house near Kendal with a garden under £500k.'",[101,2144,784],{"class":111},[101,2146,2147],{"class":103,"line":196},[101,2148,809],{"class":111},[101,2150,2151],{"class":103,"line":207},[101,2152,901],{"emptyLinePlaceholder":488},[101,2154,2155,2158,2161],{"class":103,"line":218},[101,2156,2157],{"class":111},"console.",[101,2159,2160],{"class":732},"log",[101,2162,2163],{"class":111},"(text)\n",[34,2165,2167],{"id":2166},"what-happens","What happens",[36,2169,2170,2179,2195,2204],{},[41,2171,2173],{"title":2172},"The model reads the request",[12,2174,2175,2176,2178],{},"It sees the ",[48,2177,1639],{}," tool and decides the question needs live data.",[41,2180,2182],{"title":2181},"It calls the tool",[12,2183,2184,2185,2187,2188,2191,2192,2194],{},"The model generates a ",[48,2186,1691],{}," argument such as ",[48,2189,2190],{},"\"3 bedroom house Kendal garden under 500000\"",". Your ",[48,2193,1695],{}," function calls hybrid search.",[41,2196,2198],{"title":2197},"Trawley returns structured records",[12,2199,2200,2201,2203],{},"The ",[48,2202,855],{}," array comes back as the tool result and is handed to the model.",[41,2205,2207],{"title":2206},"The model answers",[12,2208,2209],{},"It uses the records to write a grounded reply, citing real prices and locations.",[34,2211,2213],{"id":2212},"streaming-to-a-ui","Streaming to a UI",[12,2215,2216,2217,2219,2220,2223],{},"For a chat interface, swap ",[48,2218,2031],{}," for ",[48,2221,2222],{},"streamText"," and return a UI\nmessage stream. The tool definition is identical.",[92,2225,2227],{"className":1698,"code":2226,"language":1700,"meta":97,"style":97},"import { streamText, stepCountIs } from 'ai'\nimport { openai } from '@ai-sdk\u002Fopenai'\nimport { searchListings } from '.\u002Fsearch-listings'\n\nconst result = streamText({\n  model: openai('gpt-4.1'),\n  tools: { searchListings },\n  stopWhen: stepCountIs(5),\n  messages,\n})\n\nreturn result.toUIMessageStreamResponse()\n",[48,2228,2229,2240,2250,2260,2264,2278,2290,2294,2306,2311,2315,2319],{"__ignoreMap":97},[101,2230,2231,2233,2236,2238],{"class":103,"line":104},[101,2232,1707],{"class":757},[101,2234,2235],{"class":111}," { streamText, stepCountIs } ",[101,2237,1713],{"class":757},[101,2239,1716],{"class":135},[101,2241,2242,2244,2246,2248],{"class":103,"line":119},[101,2243,1707],{"class":757},[101,2245,2059],{"class":111},[101,2247,1713],{"class":757},[101,2249,2064],{"class":135},[101,2251,2252,2254,2256,2258],{"class":103,"line":127},[101,2253,1707],{"class":757},[101,2255,2071],{"class":111},[101,2257,1713],{"class":757},[101,2259,2076],{"class":135},[101,2261,2262],{"class":103,"line":139},[101,2263,901],{"emptyLinePlaceholder":488},[101,2265,2266,2268,2271,2273,2276],{"class":103,"line":150},[101,2267,758],{"class":757},[101,2269,2270],{"class":115}," result",[101,2272,764],{"class":757},[101,2274,2275],{"class":732}," streamText",[101,2277,773],{"class":111},[101,2279,2280,2282,2284,2286,2288],{"class":103,"line":158},[101,2281,2104],{"class":111},[101,2283,2107],{"class":732},[101,2285,1833],{"class":111},[101,2287,2112],{"class":135},[101,2289,1839],{"class":111},[101,2291,2292],{"class":103,"line":172},[101,2293,2119],{"class":111},[101,2295,2296,2298,2300,2302,2304],{"class":103,"line":180},[101,2297,2124],{"class":111},[101,2299,2127],{"class":732},[101,2301,1833],{"class":111},[101,2303,2132],{"class":115},[101,2305,1839],{"class":111},[101,2307,2308],{"class":103,"line":188},[101,2309,2310],{"class":111},"  messages,\n",[101,2312,2313],{"class":103,"line":196},[101,2314,809],{"class":111},[101,2316,2317],{"class":103,"line":207},[101,2318,901],{"emptyLinePlaceholder":488},[101,2320,2321,2324,2327,2330],{"class":103,"line":218},[101,2322,2323],{"class":757},"return",[101,2325,2326],{"class":111}," result.",[101,2328,2329],{"class":732},"toUIMessageStreamResponse",[101,2331,883],{"class":111},[34,2333,2335],{"id":2334},"tips","Tips",[503,2337,2338,2344,2356],{},[506,2339,2340,2343],{},[29,2341,2342],{},"Return less, not more."," Trim each record to the fields the model needs.\nSmaller tool results mean cheaper, faster, more focused answers.",[506,2345,2346,2349,2350,2352,2353,51],{},[29,2347,2348],{},"Let hybrid search do the filtering."," Do not add a tool input per filter.\nOne ",[48,2351,1691],{}," string covers price, bedrooms, dates, and location because the\nendpoint interprets them. See ",[16,2354,2355],{"href":1606},"tools overview",[506,2357,2358,2361,2362,2364,2365,2368],{},[29,2359,2360],{},"Handle the empty case."," If a scraper has no completed run, ",[48,2363,855],{}," is empty.\nReturning ",[48,2366,2367],{},"{ results: [] }"," lets the model tell the user nothing was found.",[34,2370,453],{"id":452},[455,2372,2373,2381],{"cols":119},[458,2374,2375],{"href":18,"icon":460,"title":1597},[12,2376,2377,2378,2380],{},"Every parameter, the response shape, and ",[48,2379,1180],{}," debugging.",[458,2382,2385],{"href":1606,"icon":2383,"title":2384},"plug","The integration pattern",[12,2386,2387],{},"The shape every framework guide follows.",[474,2389,2390],{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}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 .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sqxcx, html code.shiki .sqxcx{--shiki-default:#E36209}",{"title":97,"searchDepth":127,"depth":127,"links":2392},[2393,2394,2395,2396,2397,2398,2399],{"id":1646,"depth":119,"text":1647},{"id":1684,"depth":119,"text":1685},{"id":2024,"depth":119,"text":2025},{"id":2166,"depth":119,"text":2167},{"id":2212,"depth":119,"text":2213},{"id":2334,"depth":119,"text":2335},{"id":452,"depth":119,"text":453},"Expose a Trawley scraper as a tool your LLM can call, using the Vercel AI SDK.","Integration guides",{},{"title":1625,"description":2400},"docs\u002Fdevelopers\u002Fvercel-ai-sdk","jEjb9QCaEkcRhQ4jb4F_Y-PsZe-ma4IYQ4oyQ7xsKb0",{"id":2407,"title":496,"badge":3,"body":2408,"description":2494,"extension":484,"group":587,"icon":588,"lastUpdated":3,"meta":2495,"navigation":488,"order":104,"path":2496,"popular":488,"publishedAt":3,"seo":2497,"sidebarTitle":3,"stem":2498,"tree":2499,"__hash__":2500},"docs\u002Fdocs\u002Fusers\u002Fquickstart.md",{"type":9,"value":2409,"toc":2488},[2410,2413,2417,2420,2422,2455,2462,2466,2469,2471],[12,2411,2412],{},"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.",[34,2414,2416],{"id":2415},"what-youll-need","What you'll need",[12,2418,2419],{},"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.",[34,2421,37],{"id":36},[36,2423,2424,2433,2443,2449],{},[41,2425,2427],{"title":2426},"Create an account",[12,2428,2429,2430,2432],{},"Sign up at ",[48,2431,1303],{},". You start on a free plan, so you can build and test\na scraper right away.",[41,2434,2436],{"title":2435},"Start a new scraper",[12,2437,2438,2439,2442],{},"Click ",[29,2440,2441],{},"New scraper"," and paste the URL of the page you want to scrape. Trawley\nopens the page and starts looking at it for you.",[41,2444,2446],{"title":2445},"Tell the wizard what to extract",[12,2447,2448],{},"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.",[41,2450,2452],{"title":2451},"Save and run",[12,2453,2454],{},"When the preview looks right, save the scraper and run it. Trawley collects the\ndata and indexes it for search.",[12,2456,2457],{},[2458,2459],"img",{"alt":2460,"src":2461},"The Trawley setup wizard","\u002Fdocs\u002Fusers\u002Fthe-setup-wizard.png",[34,2463,2465],{"id":2464},"what-happens-next","What happens next",[12,2467,2468],{},"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.",[34,2470,453],{"id":452},[455,2472,2473,2481],{"cols":119},[458,2474,2478],{"href":2475,"icon":2476,"title":2477},"\u002Fdocs\u002Fusers\u002Fhow-trawley-works","lightbulb","How Trawley works",[12,2479,2480],{},"The handful of ideas behind scrapers, fields, jobs, and results.",[458,2482,2485],{"href":1288,"icon":2483,"title":2484},"wand-2","The setup wizard",[12,2486,2487],{},"A closer look at building a scraper by chatting.",{"title":97,"searchDepth":127,"depth":127,"links":2489},[2490,2491,2492,2493],{"id":2415,"depth":119,"text":2416},{"id":36,"depth":119,"text":37},{"id":2464,"depth":119,"text":2465},{"id":452,"depth":119,"text":453},"Set up your first Trawley scraper without writing code.",{},"\u002Fdocs\u002Fusers\u002Fquickstart",{"title":496,"description":2494},"docs\u002Fusers\u002Fquickstart","users","4WcianGx6FYzD5e28tCK1a1iYqzoMxeazCOTJCLkCAY",{"id":2502,"title":2503,"badge":3,"body":2504,"description":2576,"extension":484,"group":2577,"icon":460,"lastUpdated":3,"meta":2578,"navigation":488,"order":119,"path":2579,"popular":488,"publishedAt":3,"seo":2580,"sidebarTitle":3,"stem":2581,"tree":2499,"__hash__":2582},"docs\u002Fdocs\u002Fusers\u002Fsearching-results.md","Searching results",{"type":9,"value":2505,"toc":2570},[2506,2509,2513,2516,2522,2526,2529,2543,2547,2553,2555],[12,2507,2508],{},"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.",[34,2510,2512],{"id":2511},"searching-in-the-dashboard","Searching in the dashboard",[12,2514,2515],{},"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.",[12,2517,2518],{},[2458,2519],{"alt":2520,"src":2521},"Natural language search over results","\u002Fdocs\u002Fusers\u002Fsearching-results.png",[34,2523,2525],{"id":2524},"why-it-understands-you","Why it understands you",[12,2527,2528],{},"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.",[22,2530,2531],{"type":1197},[12,2532,2533,2534,2538,2539,2542],{},"Searches lean on your ",[16,2535,2537],{"href":2536},"\u002Fdocs\u002Fusers\u002Fchoosing-fields","field types",". \"Under £500k\"\nonly works as a precise filter if ",[48,2540,2541],{},"price"," is a number. If a range filter is not\nbehaving, check that the field's type is right.",[34,2544,2546],{"id":2545},"searching-from-your-own-apps","Searching from your own apps",[12,2548,2549,2550,2552],{},"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",[16,2551,19],{"href":18}," for developers.",[34,2554,453],{"id":452},[455,2556,2557,2564],{"cols":119},[458,2558,2561],{"href":2559,"icon":570,"title":2560},"\u002Fdocs\u002Fusers\u002Fexporting","Export your data",[12,2562,2563],{},"Take results into a spreadsheet or another tool.",[458,2565,2567],{"href":18,"icon":460,"title":2566},"Search from code",[12,2568,2569],{},"Use the same search in your own apps.",{"title":97,"searchDepth":127,"depth":127,"links":2571},[2572,2573,2574,2575],{"id":2511,"depth":119,"text":2512},{"id":2524,"depth":119,"text":2525},{"id":2545,"depth":119,"text":2546},{"id":452,"depth":119,"text":453},"Ask questions of your data in plain language.","Working with results",{},"\u002Fdocs\u002Fusers\u002Fsearching-results",{"title":2503,"description":2576},"docs\u002Fusers\u002Fsearching-results","TposUaQ8z49k61yPveunWgKHCsBLopDC-ZHjNg6wonE",{"id":2584,"title":2484,"badge":3,"body":2585,"description":2711,"extension":484,"group":2712,"icon":2483,"lastUpdated":3,"meta":2713,"navigation":488,"order":104,"path":1288,"popular":488,"publishedAt":3,"seo":2714,"sidebarTitle":3,"stem":2715,"tree":2499,"__hash__":2716},"docs\u002Fdocs\u002Fusers\u002Fthe-setup-wizard.md",{"type":9,"value":2586,"toc":2704},[2587,2590,2594,2616,2620,2624,2627,2653,2657,2660,2665,2669,2685,2687],[12,2588,2589],{},"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.",[34,2591,2593],{"id":2592},"starting-out","Starting out",[36,2595,2596,2604,2610],{},[41,2597,2599],{"title":2598},"Paste a start URL",[12,2600,2438,2601,2603],{},[29,2602,2441],{}," and enter the address of a page that lists the items you\nwant. The assistant opens that page and begins reading its structure.",[41,2605,2607],{"title":2606},"Describe what you want",[12,2608,2609],{},"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.",[41,2611,2613],{"title":2612},"Watch it work",[12,2614,2615],{},"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.",[12,2617,2618],{},[2458,2619],{"alt":2460,"src":2461},[34,2621,2623],{"id":2622},"what-the-assistant-can-do","What the assistant can do",[12,2625,2626],{},"The assistant is not just generating guesses. It works against the live page and\ncan:",[503,2628,2629,2635,2641,2647],{},[506,2630,2631,2634],{},[29,2632,2633],{},"Read the page structure"," to find the repeating items in a list.",[506,2636,2637,2640],{},[29,2638,2639],{},"Test a field"," by extracting it from the real page and showing you the value.",[506,2642,2643,2646],{},[29,2644,2645],{},"Check pagination"," so the scraper collects every page, not just the first.",[506,2648,2649,2652],{},[29,2650,2651],{},"Preview results"," so you see real captured data before saving.",[34,2654,2656],{"id":2655},"refining-by-conversation","Refining by conversation",[12,2658,2659],{},"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.",[22,2661,2662],{"type":1197},[12,2663,2664],{},"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.",[34,2666,2668],{"id":2667},"saving","Saving",[12,2670,2671,2672,2676,2677,2681,2682,51],{},"When the preview looks correct, save the scraper. From there you can\n",[16,2673,2675],{"href":2674},"\u002Fdocs\u002Fusers\u002Frunning-a-scrape","run it",", put it on a\n",[16,2678,2680],{"href":2679},"\u002Fdocs\u002Fusers\u002Fscheduling","schedule",", and ",[16,2683,2684],{"href":2579},"search the results",[34,2686,453],{"id":452},[455,2688,2689,2696],{"cols":119},[458,2690,2693],{"href":2536,"icon":2691,"title":2692},"list","Choosing fields",[12,2694,2695],{},"Pick the right fields and data types for clean results.",[458,2697,2701],{"href":2698,"icon":2699,"title":2700},"\u002Fdocs\u002Fusers\u002Fpreview-and-validate","check","Preview and validate",[12,2702,2703],{},"Make sure the data is right before you save.",{"title":97,"searchDepth":127,"depth":127,"links":2705},[2706,2707,2708,2709,2710],{"id":2592,"depth":119,"text":2593},{"id":2622,"depth":119,"text":2623},{"id":2655,"depth":119,"text":2656},{"id":2667,"depth":119,"text":2668},{"id":452,"depth":119,"text":453},"Build a scraper by chatting with an assistant that reads the page for you.","Building scrapers",{},{"title":2484,"description":2711},"docs\u002Fusers\u002Fthe-setup-wizard","7hcJY24fX421fY0IrPXJoOBlInHXRK96L_B6s5XU-L8",[2718,2768],{"id":2719,"title":2720,"badge":3,"body":2721,"description":2759,"extension":484,"group":3,"icon":3,"lastUpdated":3,"meta":2760,"navigation":488,"order":104,"path":2761,"popular":2762,"publishedAt":2763,"seo":2764,"sidebarTitle":3,"stem":2765,"tree":2766,"__hash__":2767},"docs\u002Fdocs\u002Fchangelog\u002F2026-05-31-docs-content.md","Documentation content",{"type":9,"value":2722,"toc":2757},[2723,2726,2754],[12,2724,2725],{},"The docs site is no longer just scaffolding. All three trees now have real\ncontent:",[503,2727,2728,2734,2744],{},[506,2729,2730,2733],{},[29,2731,2732],{},"Users"," — a full no-code path from the setup wizard through scheduling,\nresults, search, export, scraper settings, teams, and billing.",[506,2735,2736,2739,2740,2743],{},[29,2737,2738],{},"Developers"," — the public ",[48,2741,2742],{},"\u002Fv1"," search API reference (hybrid, results, export,\ndiff, chat), plus integration guides for wiring Trawley into an agent with the\nVercel AI SDK, the Anthropic SDK, OpenAI function calling, and LangChain.",[506,2745,2746,2749,2750,2753],{},[29,2747,2748],{},"Agents"," — the ",[48,2751,2752],{},"llms.txt"," artifacts and a no-code recipe for pointing a\nChatGPT custom GPT at a scraper's live data.",[12,2755,2756],{},"Pages document what is shipped today and flag what is coming (API\nauthentication), so nothing reads as available before it is.",{"title":97,"searchDepth":127,"depth":127,"links":2758},[],"Real content lands across the Users, Developers, and Agents trees.",{},"\u002Fdocs\u002Fchangelog\u002F2026-05-31-docs-content",false,"2026-05-31",{"title":2720,"description":2759},"docs\u002Fchangelog\u002F2026-05-31-docs-content","changelog","RFPPK5TF8zu8PxfkUucuoODHdyUD28SNC00X0VzQvsw",{"id":2769,"title":2770,"badge":3,"body":2771,"description":2793,"extension":484,"group":3,"icon":3,"lastUpdated":3,"meta":2794,"navigation":488,"order":104,"path":2795,"popular":2762,"publishedAt":2796,"seo":2797,"sidebarTitle":3,"stem":2798,"tree":2766,"__hash__":2799},"docs\u002Fdocs\u002Fchangelog\u002F2026-05-30-docs-site-shipping.md","Docs site shipping",{"type":9,"value":2772,"toc":2791},[2773,2780],[12,2774,2775,2776,2779],{},"We shipped the first cut of ",[48,2777,2778],{},"trawley.ai\u002Fdocs"," covering all three\naudiences: Users (no-code wizard), Developers (API\u002FSDK), and Agents\n(LLM-consumable artifacts + AI-tool recipes).",[12,2781,2782,2783,2786,2787,2790],{},"The site uses Nuxt Content v3 with build-time SQLite (no runtime DB),\nships a Mintlify-style component vocabulary, and emits both ",[48,2784,2785],{},"\u002Fllms.txt","\nand ",[48,2788,2789],{},"\u002Fllms-full.txt"," at the site root for AI agents to consume.",{"title":97,"searchDepth":127,"depth":127,"links":2792},[],"The Trawley docs site lands in feat\u002Fdocs-site.",{},"\u002Fdocs\u002Fchangelog\u002F2026-05-30-docs-site-shipping","2026-05-30",{"title":2770,"description":2793},"docs\u002Fchangelog\u002F2026-05-30-docs-site-shipping","8Uc5FrU0MqyHA0sb6KdHm1Czm9hBjaTvT1KoT1dRIHU",1780914808884]