Use Upsonic’s Agent with ApifyTools to search Google Maps for restaurants and food spots using natural language queries, then save the results as Markdown.
This example shows how to build a restaurant discovery agent using Upsonic’s Agent with the built-in ApifyTools. Ask it anything like “cheap falafel in Kadıköy” or “vegan brunch in Cihangir” and it searches Google Maps via Apify, interprets the results, and saves a curated list to Markdown.
Agent — LLM-driven agent that orchestrates the search and formats results
ApifyTools — Built-in Upsonic toolkit wrapping the Apify API; registers the compass/crawler-google-places Actor as a callable tool and automatically exposes its full input schema to the agent
Task — Natural language query describing what and where to find
Get your free Apify API key — Sign up at console.apify.com, navigate to Settings → Integrations, and copy your Personal API token. No credit card required to get started.
from upsonic import Agent, Taskfrom upsonic.tools.custom_tools.apify import ApifyToolsfrom dotenv import load_dotenvimport osload_dotenv()# ApifyTools registers the Google Maps crawler as a tool.# The agent automatically receives the Actor's full input schema,# so it knows exactly which parameters to pass based on the user's query.## actor_defaults pre-sets config that never needs to change:# - maxCrawledPlacesPerSearch: limit results to avoid token overflow# - maxImages: skip images (not needed for text output)# - outputFormats: return compact markdown instead of verbose JSON## timeout=180.0 overrides the 30s default — the Actor takes ~60-90s to run.# max_retries=0 prevents parallel duplicate runs on timeout.agent = Agent( "anthropic/claude-sonnet-4-5", tools=[ ApifyTools( actors=["compass/crawler-google-places"], apify_api_token=os.getenv("APIFY_API_KEY"), actor_defaults={ "compass/crawler-google-places": { "maxCrawledPlacesPerSearch": 10, "maxImages": 0, "outputFormats": ["markdown"], } }, timeout=180.0, max_retries=0, ) ],)task = Task("Tell me cheap and tasty falafel places in Kadıköy, Istanbul")agent.print_do(task)with open("results.md", "w") as f: f.write(task.response)print("\nResults saved to results.md")
Searches Google Maps and returns place details including name, address, rating, price level, and reviews
ApifyTools fetches the Actor’s input schema automatically so the agent always knows which parameters to pass. See the Upsonic Apify integration docs for full configuration options.
Each run typically takes 60–90 seconds as the Google Maps Actor needs time to crawl. Keep maxCrawledPlacesPerSearch at 10 or below — more results can exceed the model’s context limit.
Apify’s free tier is sufficient for several searches
Output is saved as results.md in the current directory
Store API keys in .env — never hardcode them in source files
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Upsonic AI","colors":{"primary":"#03D47E","light":"#00D37F","dark":"#00D37F"},"logo":{"light":"https://mintcdn.com/upsonic/eD3pOHUjFRrpRlr1/logo/logo_name.png?fit=max\u0026auto=format\u0026n=eD3pOHUjFRrpRlr1\u0026q=85\u0026s=a5f719ba8cc7e2e5247f98ce0f4cd570","dark":"https://mintcdn.com/upsonic/NvtIPMvILtME55zd/logo/logo_name_dark.png?fit=max\u0026auto=format\u0026n=NvtIPMvILtME55zd\u0026q=85\u0026s=b6ee805d29e1196fd56206200f0fe42b"},"favicon":"https://mintcdn.com/upsonic/Q5tER9e3gIUsdKBE/favicon.png?fit=max\u0026auto=format\u0026n=Q5tER9e3gIUsdKBE\u0026q=85\u0026s=6d90389a3780b1c15cff5e3f56f8bd5b","appearance":{"default":"dark","strict":false},"navbar":{"primary":{"type":"github","href":"https://github.com/Upsonic/Upsonic"}},"footer":{"socials":{"discord":"https://discord.gg/7648R8JahY","x":"https://x.com/UpsonicAI","github":"https://github.com/Upsonic","linkedin":"https://www.linkedin.com/company/getupsonic"}},"fonts":{"heading":{"family":"Helvetica","weight":750},"body":{"family":"Inter","weight":400}},"integrations":{"gtm":{"tagId":"GTM-MQ8VVXSB"}},"interaction":{"drilldown":true},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"upsonic","hasAudioNarration":false,"actualSubdomain":"upsonic","customDomains":["docs.upsonic.ai"],"gitSource":{"type":"github","owner":"upsonic","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae0964beb5b4f30de3efad5","collectionId":"a442db30-1027-4021-a14e-88bb113483cc","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae0964beb5b4f30de3efad5"},"entitlements":{},"buildId":"6ae0964beb5b4f30de3efad5","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"Upsonic Framework","count":373},{"language":"default","tag":"CONCEPTS","count":353},{"language":"default","tag":"Usage","count":109},{"language":"default","tag":"Advanced","count":79},{"language":"default","tag":"AgentOS","count":53},{"language":"default","tag":"Tools","count":52},{"language":"default","tag":"Knowledge Base","count":51},{"language":"default","tag":"Integrations","count":45},{"language":"default","tag":"LLM Support","count":32},{"language":"default","tag":"Examples","count":31}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"examples/integration-examples/apify-restaurant-scout","slug":"/examples/integration-examples/apify-restaurant-scout","pageMetadata":{"title":"Apify Restaurant Scout","sidebarTitle":"🎬 Apify Restaurant Scout","description":"Use Upsonic's Agent with ApifyTools to search Google Maps for restaurants and food spots using natural language queries, then save the results as Markdown.","tag":"new","href":"/examples/integration-examples/apify-restaurant-scout"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Use Upsonic’s Agent with ApifyTools to search Google Maps for restaurants and food spots using natural language queries, then save the results as Markdown.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,OptimizedFrame,Table,Tip,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedFrame)_missingMdxReference(`OptimizedFrame`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`This example shows how to build a `,_jsx(_components.strong,{children:`restaurant discovery agent`}),` using Upsonic’s `,_jsx(_components.strong,{children:`Agent`}),` with the built-in `,_jsx(_components.strong,{children:`ApifyTools`}),`. Ask it anything like `,_jsx(_components.em,{children:`“cheap falafel in Kadıköy”`}),` or `,_jsx(_components.em,{children:`“vegan brunch in Cihangir”`}),` and it searches Google Maps via Apify, interprets the results, and saves a curated list to Markdown.`]}),`\n`,_jsx(OptimizedFrame,{width:`100%`,style:{aspectRatio:`16/9`,borderRadius:`8px`},src:`https://www.youtube.com/embed/LPtZDQlLie8`,title:`Apify Restaurant Scout — Upsonic Demo`,frameBorder:`0`,allow:`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture`,allowFullScreen:true}),`\n`,_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:`The agent has three components:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Agent`}),` — LLM-driven agent that orchestrates the search and formats results`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`ApifyTools`}),` — Built-in Upsonic toolkit wrapping the Apify API; registers the `,_jsx(_components.code,{children:`compass/crawler-google-places`}),` Actor as a callable tool and automatically exposes its full input schema to the agent`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Task`}),` — Natural language query describing what and where to find`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`project-structure`,children:`Project Structure`}),`\n`,_jsx(CodeBlock,{numberOfLines:`7`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`apify_google_maps_restaurant_scout/`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`├── main.py # Agent setup and task definition`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`├── example_results.md # Sample output — see what the agent produces`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`├── requirements.txt # Python dependencies`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`├── .env.example # API key template`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`└── README.md`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`environment-variables`,children:`Environment Variables`}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Get your free Apify API key`}),` — `,_jsx(_components.a,{href:`https://console.apify.com`,children:`Sign up at console.apify.com`}),`, navigate to `,_jsx(_components.strong,{children:`Settings → Integrations`}),`, and copy your Personal API token. No credit card required to get started.`]})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Required: Apify API token — https://console.apify.com`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`APIFY_API_KEY`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`apify_api_your-token-here`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Required: LLM provider key (example uses Anthropic Claude)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`ANTHROPIC_API_KEY`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`your-anthropic-key-here`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`installation`,children:`Installation`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# With uv (recommended)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`uv`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` venv`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`source`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .venv/bin/activate`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`uv`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pip`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -r`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` requirements.txt`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# With pip`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`python3`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -m`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` venv`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .venv`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`source`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .venv/bin/activate`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`pip`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` upsonic[custom-tools]`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` python-dotenv`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` apify-client`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` anthropic`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`complete-implementation`,children:`Complete Implementation`}),`\n`,_jsx(Heading,{level:`3`,id:`main-py`,children:`main.py`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`44`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`44`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` upsonic `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Agent, Task`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` upsonic.tools.custom_tools.apify `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ApifyTools`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` dotenv `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` load_dotenv`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` os`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`load_dotenv()`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# ApifyTools registers the Google Maps crawler as a tool.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# The agent automatically receives the Actor's full input schema,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# so it knows exactly which parameters to pass based on the user's query.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`#`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# actor_defaults pre-sets config that never needs to change:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# - maxCrawledPlacesPerSearch: limit results to avoid token overflow`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# - maxImages: skip images (not needed for text output)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# - outputFormats: return compact markdown instead of verbose JSON`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`#`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# timeout=180.0 overrides the 30s default — the Actor takes ~60-90s to run.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# max_retries=0 prevents parallel duplicate runs on timeout.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`agent `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Agent(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"anthropic/claude-sonnet-4-5\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` tools`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ApifyTools(`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` actors`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"compass/crawler-google-places\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` apify_api_token`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`os.getenv(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"APIFY_API_KEY\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` actor_defaults`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"compass/crawler-google-places\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"maxCrawledPlacesPerSearch\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`10`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"maxImages\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"outputFormats\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"markdown\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` timeout`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`180.0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` max_retries`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` )`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`task `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Task(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Tell me cheap and tasty falafel places in Kadıköy, Istanbul\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`agent.print_do(task)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`with`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` open`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"results.md\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"w\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`as`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` f:`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` f.write(task.response)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`print`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\n`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Results saved to results.md\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`requirements-txt`,children:`requirements.txt`}),`\n`,_jsx(CodeBlock,{numberOfLines:`5`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`upsonic[custom-tools]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`python-dotenv`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`apify-client`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`anthropic`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How It Works`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Step`}),_jsx(_components.th,{children:`What Happens`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`1`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`agent.print_do(task)`}),` sends the natural language query to the LLM`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`2`}),_jsxs(_components.td,{children:[`The LLM calls `,_jsx(_components.code,{children:`compass/crawler-google-places`}),` via ApifyTools with the appropriate search parameters`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`3`}),_jsx(_components.td,{children:`Apify crawls Google Maps and returns place details as compact Markdown`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`4`}),_jsx(_components.td,{children:`The LLM interprets the results and formats a clean, readable response`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`5`}),_jsxs(_components.td,{children:[`Output is printed to the terminal and saved to `,_jsx(_components.code,{children:`results.md`})]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`sample-output`,children:`Sample Output`}),`\n`,_jsx(CodeBlock,{numberOfLines:`20`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`20`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`## Best Cheap \u0026 Tasty Falafel Places in Kadıköy:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`### 1. Falafella ⭐ 4.3/5`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Price: ₺1-200 (Very cheap!)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Address: Caferağa, Moda Cd. No:53A, Kadıköy`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Hours: 11 AM - 2 AM (Late night on weekends!)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Why go: Most affordable option. Popular for falafel wraps. Vegan options available!`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`### 2. Nohut Falafel \u0026 Humus ⭐ 4.8/5`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Price: ₺200-400`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Address: Osmanağa, Sakız Sk. No:22C, Kadıköy`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Hours: 12 PM - 10 PM`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Why go: Highest rated! Gluten-free and vegan. Famous for hummus and fresh ingredients.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`### 3. Jeni Falafel \u0026 Rolls ⭐ 4.4/5`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Price: ₺200-400`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Address: Suadiye, Hamiyet Yüceses Sk. No:19, Kadıköy`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Hours: 12 PM - 9:30 PM`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Why go: Known for homemade taste and fresh ingredients. Great wraps and portion sizes.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`apify-actor-used`,children:`Apify Actor Used`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Actor`}),_jsx(_components.th,{children:`Purpose`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`compass/crawler-google-places`})}),_jsx(_components.td,{children:`Searches Google Maps and returns place details including name, address, rating, price level, and reviews`})]})})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ApifyTools`}),` fetches the Actor’s input schema automatically so the agent always knows which parameters to pass. See the `,_jsx(_components.a,{href:`/concepts/tools/scraping-tools/apify`,children:`Upsonic Apify integration docs`}),` for full configuration options.`]}),`\n`,_jsx(Heading,{level:`2`,id:`customization`,children:`Customization`}),`\n`,_jsx(Heading,{level:`3`,id:`change-the-query`,children:`Change the query`}),`\n`,_jsxs(_components.p,{children:[`Edit the `,_jsx(_components.code,{children:`Task`}),` in `,_jsx(_components.code,{children:`main.py`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`task `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Task(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Best rooftop bars in Beyoğlu, Istanbul\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`swap-the-actor`,children:`Swap the Actor`}),`\n`,_jsxs(_components.p,{children:[`The Google Maps Actor is one of thousands available on the `,_jsx(_components.a,{href:`https://apify.com/store`,children:`Apify Store`}),`. Change the `,_jsx(_components.code,{children:`actors`}),` field to use any other Actor:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`10`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ApifyTools(`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` actors`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"apify/instagram-scraper\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` actor_defaults`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"apify/instagram-scraper\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"directUrls\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://www.instagram.com/some_account/\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` timeout`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`180.0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` max_retries`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`adjust-result-count`,children:`Adjust result count`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"maxCrawledPlacesPerSearch\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Fewer results, faster run`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"maxCrawledPlacesPerSearch\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`20`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# More results (watch token limits)`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`use-a-different-model`,children:`Use a different model`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`agent `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Agent(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"openai/gpt-4o\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# or any other Upsonic-supported provider`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` tools`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`...`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`key-features`,children:`Key Features`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Feature`}),_jsx(_components.th,{children:`Detail`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Natural language queries`}),_jsx(_components.td,{children:`Ask in plain English — the agent handles query-to-parameters translation`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Auto schema discovery`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`ApifyTools`}),` fetches the Actor’s input schema so the LLM always passes the right parameters`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Markdown output`}),_jsx(_components.td,{children:`Results are returned as compact Markdown, easy to read and save`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Model-agnostic`}),_jsxs(_components.td,{children:[`Swap `,_jsx(_components.code,{children:`anthropic/claude-sonnet-4-5`}),` for any Upsonic-supported provider`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Extensible`}),_jsx(_components.td,{children:`Swap the Actor to search Instagram, TripAdvisor, or thousands of other sources`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`notes`,children:`Notes`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Each run typically takes `,_jsx(_components.strong,{children:`60–90 seconds`}),` as the Google Maps Actor needs time to crawl. Keep `,_jsx(_components.code,{children:`maxCrawledPlacesPerSearch`}),` at 10 or below — more results can exceed the model’s context limit.`]})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Apify’s free tier is sufficient for several searches`}),`\n`,_jsxs(_components.li,{children:[`Output is saved as `,_jsx(_components.code,{children:`results.md`}),` in the current directory`]}),`\n`,_jsxs(_components.li,{children:[`Store API keys in `,_jsx(_components.code,{children:`.env`}),` — never hardcode them in source files`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`repository`,children:`Repository`}),`\n`,_jsxs(_components.p,{children:[`View the full example: `,_jsx(_components.a,{href:`https://github.com/Upsonic/Examples/tree/master/examples/web_search_and_scraping/apify_google_maps_restaurant_scout`,children:`Apify Restaurant Scout`})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Apify Restaurant Scout","sidebarTitle":"🎬 Apify Restaurant Scout","description":"Use Upsonic's Agent with ApifyTools to search Google Maps for restaurants and food spots using natural language queries, then save the results as Markdown.","tag":"new","href":"/examples/integration-examples/apify-restaurant-scout"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Project Structure","slug":"project-structure","depth":2,"children":[{"title":"Environment Variables","slug":"environment-variables","depth":3,"children":[]}]},{"title":"Installation","slug":"installation","depth":2,"children":[]},{"title":"Complete Implementation","slug":"complete-implementation","depth":2,"children":[{"title":"main.py","slug":"main-py","depth":3,"children":[]},{"title":"requirements.txt","slug":"requirements-txt","depth":3,"children":[]}]},{"title":"How It Works","slug":"how-it-works","depth":2,"children":[]},{"title":"Sample Output","slug":"sample-output","depth":2,"children":[]},{"title":"Apify Actor Used","slug":"apify-actor-used","depth":2,"children":[]},{"title":"Customization","slug":"customization","depth":2,"children":[{"title":"Change the query","slug":"change-the-query","depth":3,"children":[]},{"title":"Swap the Actor","slug":"swap-the-actor","depth":3,"children":[]},{"title":"Adjust result count","slug":"adjust-result-count","depth":3,"children":[]},{"title":"Use a different model","slug":"use-a-different-model","depth":3,"children":[]}]},{"title":"Key Features","slug":"key-features","depth":2,"children":[]},{"title":"Notes","slug":"notes","depth":2,"children":[]},{"title":"Repository","slug":"repository","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/upsonic/418601343a17abbb/ga.js"],"subdomain":"upsonic","siteName":"Upsonic AI","title":"Apify Restaurant Scout - Upsonic AI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-03-17T15:37:02.788Z","originalFileLocation":"examples/integration-examples/apify-restaurant-scout.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Use Upsonic\u0026#x27;s Agent with ApifyTools to search Google Maps for restaurants and food spots using natural language queries, then save the results as Markdown.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Upsonic AI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/upsonic/adDEYx-Qrl3jC12g/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/upsonic/adDEYx-Qrl3jC12g/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/upsonic/adDEYx-Qrl3jC12g/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/upsonic/adDEYx-Qrl3jC12g/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/upsonic/adDEYx-Qrl3jC12g/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/upsonic/adDEYx-Qrl3jC12g/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/upsonic/adDEYx-Qrl3jC12g/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/upsonic/adDEYx-Qrl3jC12g/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/upsonic/adDEYx-Qrl3jC12g/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Apify Restaurant Scout - Upsonic AI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Use Upsonic\u0026#x27;s Agent with ApifyTools to search Google Maps for restaurants and food spots using natural language queries, then save the results as Markdown.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Upsonic AI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.upsonic.ai/examples/integration-examples/apify-restaurant-scout\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://upsonic.mintlify.app/_mintlify/api/og/v2?division=Integration+Examples\u0026amp;title=Apify+Restaurant+Scout\u0026amp;description=Use+Upsonic%27s+Agent+with+ApifyTools+to+search+Google+Maps+for+restaurants+and+food+spots+using+natural+language+queries%2C+then+save+the+results+as+Markdown.\u0026amp;theme=f10e740e935a15f993181be8\u0026amp;signature=536e5cb82d1e2f299dbb7f5d06a57225f8daf34bcc6e3cf6e1703203316888b6\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Apify Restaurant Scout - Upsonic AI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Use Upsonic\u0026#x27;s Agent with ApifyTools to search Google Maps for restaurants and food spots using natural language queries, then save the results as Markdown.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://upsonic.mintlify.app/_mintlify/api/og/v2?division=Integration+Examples\u0026amp;title=Apify+Restaurant+Scout\u0026amp;description=Use+Upsonic%27s+Agent+with+ApifyTools+to+search+Google+Maps+for+restaurants+and+food+spots+using+natural+language+queries%2C+then+save+the+results+as+Markdown.\u0026amp;theme=f10e740e935a15f993181be8\u0026amp;signature=536e5cb82d1e2f299dbb7f5d06a57225f8daf34bcc6e3cf6e1703203316888b6\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/upsonic/adDEYx-Qrl3jC12g/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Upsonic AI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#03D47E\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.upsonic.ai/examples/integration-examples/apify-restaurant-scout\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/examples/integration-examples/apify-restaurant-scout.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.upsonic.ai/#organization\",\"name\":\"Upsonic AI\",\"url\":\"https://docs.upsonic.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/upsonic/eD3pOHUjFRrpRlr1/logo/logo_name.png?fit=max\u0026auto=format\u0026n=eD3pOHUjFRrpRlr1\u0026q=85\u0026s=a5f719ba8cc7e2e5247f98ce0f4cd570\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.upsonic.ai#website\",\"name\":\"Upsonic AI\",\"url\":\"https://docs.upsonic.ai\",\"publisher\":{\"@id\":\"https://docs.upsonic.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.upsonic.ai/examples/integration-examples/apify-restaurant-scout#webpage\",\"url\":\"https://docs.upsonic.ai/examples/integration-examples/apify-restaurant-scout\",\"name\":\"Apify Restaurant Scout\",\"description\":\"Use Upsonic's Agent with ApifyTools to search Google Maps for restaurants and food spots using natural language queries, then save the results as Markdown.\",\"dateModified\":\"2026-03-17T15:37:02.788Z\",\"isPartOf\":{\"@id\":\"https://docs.upsonic.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.upsonic.ai/examples/integration-examples/apify-restaurant-scout#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.upsonic.ai/examples/integration-examples/apify-restaurant-scout#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Integration Examples\",\"item\":\"https://docs.upsonic.ai/examples/integration-examples/firecrawl-agent\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Apify Restaurant Scout\",\"item\":\"https://docs.upsonic.ai/examples/integration-examples/apify-restaurant-scout\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.upsonic.ai/examples/integration-examples/apify-restaurant-scout#article\",\"headline\":\"Apify Restaurant Scout\",\"name\":\"Apify Restaurant Scout\",\"description\":\"Use Upsonic's Agent with ApifyTools to search Google Maps for restaurants and food spots using natural language queries, then save the results as Markdown.\",\"url\":\"https://docs.upsonic.ai/examples/integration-examples/apify-restaurant-scout\",\"mainEntityOfPage\":{\"@id\":\"https://docs.upsonic.ai/examples/integration-examples/apify-restaurant-scout#webpage\"},\"dateModified\":\"2026-03-17T15:37:02.788Z\",\"publisher\":{\"@id\":\"https://docs.upsonic.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.upsonic.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Upsonic AI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Upsonic AI","nav":{"global":null,"tabs":[{"tab":"Upsonic Framework","pages":[{"title":"Upsonic Framework","href":"/get-started/introduction"}]},{"tab":"AgentOS","pages":[{"title":"AgentOS","href":"/agentos/get-started/introduction"}]},{"tab":"Universal Commerce Protocol (UCP)","pages":[{"title":"Universal Commerce Protocol (UCP)","href":"/ucp"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/1-create-a-task"}]},{"tab":"Reference","pages":[{"title":"Reference","href":"/reference/agent/agent"}]},{"tab":"Examples","groups":[{"group":"Overview","pages":[{"title":"Introduction","href":"/examples/overview/introduction"}]},{"group":"Business \u0026 Sales","pages":[{"title":"Find Agreement Links","sidebarTitle":"🎬 Find Agreement Links","href":"/examples/business-sales/find-agreement-links"},{"title":"Find Example Product","sidebarTitle":"🎬 Find Example Product","href":"/examples/business-sales/find-example-product"},{"title":"Classify Emails","sidebarTitle":"🎬 Classify Emails","href":"/examples/business-sales/classify-emails"},{"title":"Company Research \u0026 Sales Strategy Agent","href":"/examples/business-sales/company_research_sales_strategy_agent"},{"title":"Sales Offer Generator Agent","href":"/examples/business-sales/sales_offer_agent"},{"title":"Find Sales Categories","href":"/examples/business-sales/find-sales-categories"},{"title":"Find Company Website","href":"/examples/business-sales/find-company-website"},{"title":"Extract People","href":"/examples/business-sales/extract-people"},{"title":"AI Governance Lexicon Agent","href":"/examples/business-sales/ai_lexicon"},{"title":"Landing Page Generation Agent","href":"/examples/business-sales/landing_page_generation"},{"title":"Loan Covenant Monitoring Agent","href":"/examples/business-sales/loan_covenant_monitoring"}]},{"group":"Document Analysis","pages":[{"title":"Contract Analyzer","href":"/examples/document-analysis/contract-analyzer"},{"title":"Document Analyzer","href":"/examples/document-analysis/document-analyzer"}]},{"group":"Code \u0026 Development","pages":[{"title":"Groq Code Review \u0026 Best Practices Agent","href":"/examples/code-development/groq-code-review-agent"},{"title":"Git Changelog Writer","href":"/examples/code-development/git-changelog-writer"}]},{"group":"Autonomous Agents","pages":[{"title":"DevOps Telegram Bot","sidebarTitle":"🎬 DevOps Telegram Bot","href":"/examples/autonomous-agents/devops-telegram-bot"},{"title":"Expense Tracker Bot","sidebarTitle":"🎬 Expense Tracker Bot","href":"/examples/autonomous-agents/expense-tracker-bot"},{"title":"Operations Analyst","sidebarTitle":"🎬 Operations Analyst","href":"/examples/autonomous-agents/operations-analyst"},{"title":"Folder Organizer","sidebarTitle":"🎬 Folder Organizer","href":"/examples/autonomous-agents/folder-organizer"}]},{"group":"Integration Examples","pages":[{"title":"Firecrawl Shopping Scraper","description":"Use Upsonic's Agent with FirecrawlTools to scrape a shopping website and extract product names, prices, and descriptions in a structured, readable format.","href":"/examples/integration-examples/firecrawl-agent"},{"title":"Apify Restaurant Scout","sidebarTitle":"🎬 Apify Restaurant Scout","tag":"new","href":"/examples/integration-examples/apify-restaurant-scout"}]},{"group":"Model Integrations","pages":[{"title":"NVIDIA Agent","description":"Use Upsonic's Agent framework with NVIDIA NIM models via NvidiaModel","href":"/examples/model-integrations/nvidia_agent"},{"title":"Ollama Agent","href":"/examples/model-integrations/ollama_agent"}]},{"group":"Safety \u0026 Compliance","pages":[{"title":"Safety Engine with Safeguard LLM Models","href":"/examples/safety-compliance/safety_engine_with_safeguard_llm_models"},{"title":"Crypto Block Policy","href":"/examples/safety-compliance/crypto-block"}]}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/integrations/overview"}]},{"tab":"Community","pages":[{"title":"Community","href":"/community"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"title":"Apify Restaurant Scout - Upsonic AI","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":[],"chunks":[]}