diff --git a/pages/toolkits/_meta.ts b/pages/toolkits/_meta.ts
index f06f2a3e8..65c8228da 100644
--- a/pages/toolkits/_meta.ts
+++ b/pages/toolkits/_meta.ts
@@ -21,6 +21,9 @@ export default {
development: {
title: "Developer Tools",
},
+ search: {
+ title: "Search Tools",
+ },
"-- Submit your toolkit": {
type: "separator",
title: "Submit your toolkit",
diff --git a/pages/toolkits/search/google_finance.mdx b/pages/toolkits/search/google_finance.mdx
new file mode 100644
index 000000000..64a1891de
--- /dev/null
+++ b/pages/toolkits/search/google_finance.mdx
@@ -0,0 +1,124 @@
+# Google Finance
+
+import ToolInfo from "@/components/ToolInfo";
+import Badges from "@/components/Badges";
+import TabbedCodeBlock from "@/components/TabbedCodeBlock";
+import TableOfContents from "@/components/TableOfContents";
+
+
+
+
+
+The Arcade Google Finance toolkit lets you fetch real-time and historical stock data with ease. Use these tools to build intelligent agents and applications that fetch:
+
+- Stock summary data.
+- Historical stock data.
+
+## Install
+
+```bash
+pip install arcade_search
+```
+
+
+ pip installing the toolkit is only needed if you are [self-hosting](/home/install/overview) Arcade. You do not need to install the toolkit if you're using Arcade Cloud.
+
+
+## Available Tools
+
+
+
+
+ If you need an action that's not listed here, please [contact us](mailto:contact@arcade.dev) to request a new tool, or [create your own tools](/home/build-tools/create-a-toolkit).
+
+
+## GetStockSummary
+
+Retrieve summary information for a given stock using the Google Finance API via SerpAPI. This tool returns the current price and price change from the most recent trading day.
+
+**Parameters**
+
+- **`ticker_symbol`** _(string, required)_: The stock ticker, e.g., 'GOOG'.
+- **`exchange_identifier`** _(string, required)_: The market identifier, e.g., 'NASDAQ'.
+
+
+
+
+## GetStockHistoricalData
+
+Fetch historical data for a given stock over a defined time window. This tool returns the stock's price and volume data along with key events when available.
+
+**Parameters**
+
+- **`ticker_symbol`** _(string, required)_: The stock ticker, e.g., 'GOOG'.
+- **`exchange_identifier`** _(string, required)_: The market identifier, e.g., 'NASDAQ' or 'NYSE'.
+- **`window`** _(enum ([GoogleFinanceWindow](/toolkits/search/reference#googlefinancewindow)), optional, defaults to ONE_MONTH)_: Time window for the graph data.
+
+
+
+
+## Auth
+
+The Arcade Google Finance toolkit uses the [SerpAPI](https://serpapi.com/) to get stock data from Google Finance.
+
+- **Secret:**
+ - `SERP_API_KEY`: Your SerpAPI API key.
+
+ Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](/home/install/overview) Arcade. If you're using Arcade Cloud, the secret is already set for you. To manage your secrets, go to the [Secrets page](https://api.arcade.dev/dashboard/auth/secrets) in the Arcade Dashboard.
+
\ No newline at end of file
diff --git a/pages/toolkits/search/google_flights.mdx b/pages/toolkits/search/google_flights.mdx
new file mode 100644
index 000000000..f979678fa
--- /dev/null
+++ b/pages/toolkits/search/google_flights.mdx
@@ -0,0 +1,135 @@
+# Google Flights
+
+import ToolInfo from "@/components/ToolInfo";
+import Badges from "@/components/Badges";
+import TabbedCodeBlock from "@/components/TabbedCodeBlock";
+import TableOfContents from "@/components/TableOfContents";
+
+
+
+
+
+The Arcade Google Flights toolkit lets you search for flights with ease. Use these tools to build intelligent agents and applications that:
+
+- Search for round-trip flights.
+- Search for one-way flights.
+
+## Install
+
+```bash
+pip install arcade_search
+```
+
+
+ pip installing the toolkit is only needed if you are [self-hosting](/home/install/overview) Arcade. You do not need to install the toolkit if you're using Arcade Cloud.
+
+
+## Available Tools
+
+
+
+## SearchRoundtripFlights
+
+Retrieve flight search results using Google Flights.
+
+**Parameters**
+
+- **`departure_airport_code`** _(string, required)_: The departure airport code. An uppercase 3-letter code.
+- **`arrival_airport_code`** _(string, required)_: The arrival airport code. An uppercase 3-letter code.
+- **`outbound_date`** _(string, required)_: Flight outbound date in YYYY-MM-DD format.
+- **`return_date`** _(string, optional)_: Flight return date in YYYY-MM-DD format.
+- **`currency_code`** _(string, optional)_: Currency of the returned prices. Defaults to 'USD'.
+- **`travel_class`** _(enum ([GoogleFlightsTravelClass](/toolkits/search/reference#googleflightstravelclass)), optional)_: Travel class of the flight. Defaults to 'ECONOMY'.
+- **`num_adults`** _(int, optional)_: Number of adult passengers. Defaults to 1.
+- **`num_children`** _(int, optional)_: Number of child passengers. Defaults to 0.
+- **`max_stops`** _(enum ([GoogleFlightsMaxStops](/toolkits/search/reference#googleflightsmaxstops)), optional)_: Maximum number of stops (layovers) for the flight. Defaults to any number of stops.
+- **`sort_by`** _(enum ([GoogleFlightsSortBy](/toolkits/search/reference#googleflightssortby)), optional)_: The sorting order of the results. Defaults to TOP_FLIGHTS.
+
+
+
+
+## SearchOneWayFlights
+
+Retrieve flight search results for a one-way flight using Google Flights.
+
+**Parameters**
+
+- **`departure_airport_code`** _(string, required)_: The departure airport code. An uppercase 3-letter code.
+- **`arrival_airport_code`** _(string, required)_: The arrival airport code. An uppercase 3-letter code.
+- **`outbound_date`** _(string, required)_: Flight departure date in YYYY-MM-DD format.
+- **`currency_code`** _(string, optional)_: Currency of the returned prices. Defaults to 'USD'.
+- **`travel_class`** _(enum ([GoogleFlightsTravelClass](/toolkits/search/reference#googleflightstravelclass)), optional)_: Travel class of the flight. Defaults to 'ECONOMY'.
+- **`num_adults`** _(int, optional)_: Number of adult passengers. Defaults to 1.
+- **`num_children`** _(int, optional)_: Number of child passengers. Defaults to 0.
+- **`max_stops`** _(enum ([GoogleFlightsMaxStops](/toolkits/search/reference#googleflightsmaxstops)), optional)_: Maximum number of stops (layovers) for the flight. Defaults to any number of stops.
+- **`sort_by`** _(enum ([GoogleFlightsSortBy](/toolkits/search/reference#googleflightssortby)), optional)_: The sorting order of the results. Defaults to TOP_FLIGHTS.
+
+
+
+
+## Auth
+
+The Arcade Google Flights toolkit uses the [SerpAPI](https://serpapi.com/) to search for flights from Google Flights.
+
+- **Secret:**
+ - `SERP_API_KEY`: Your SerpAPI API key.
+
+
+ Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](/home/install/overview) Arcade. If you're using Arcade Cloud, the secret is already set for you. To manage your secrets, go to the [Secrets page](https://api.arcade.dev/dashboard/auth/secrets) in the Arcade Dashboard.
+
\ No newline at end of file
diff --git a/pages/toolkits/search/google_hotels.mdx b/pages/toolkits/search/google_hotels.mdx
new file mode 100644
index 000000000..a26d3c8c5
--- /dev/null
+++ b/pages/toolkits/search/google_hotels.mdx
@@ -0,0 +1,92 @@
+# Google Hotels
+
+import ToolInfo from "@/components/ToolInfo";
+import Badges from "@/components/Badges";
+import TabbedCodeBlock from "@/components/TabbedCodeBlock";
+import TableOfContents from "@/components/TableOfContents";
+
+
+
+
+
+The Arcade Google Hotels toolkit lets you search for hotels with ease. Use this tool to build intelligent agents and applications that search for hotels worldwide.
+
+## Install
+
+```bash
+pip install arcade_search
+```
+
+
+ pip installing the toolkit is only needed if you are [self-hosting](/home/install/overview) Arcade. You do not need to install the toolkit if you're using Arcade Cloud.
+
+
+## Available Tools
+
+
+
+## SearchHotels
+
+Retrieve hotel search results using the Google Hotels API.
+
+**Parameters**
+
+- **`location`** _(string, required)_: Location to search for hotels, e.g., a city name, a state, etc.
+- **`check_in_date`** _(string, required)_: Check-in date in YYYY-MM-DD format.
+- **`check_out_date`** _(string, required)_: Check-out date in YYYY-MM-DD format.
+- **`query`** _(string, optional)_: Anything that would be used in a regular Google Hotels search.
+- **`currency`** _(string, optional)_: Currency code for prices. Defaults to 'USD'.
+- **`min_price`** _(int, optional)_: Minimum price per night. Defaults to no minimum.
+- **`max_price`** _(int, optional)_: Maximum price per night. Defaults to no maximum.
+- **`num_adults`** _(int, optional)_: Number of adults per room. Defaults to 2.
+- **`num_children`** _(int, optional)_: Number of children per room. Defaults to 0.
+- **`sort_by`** _(enum ([GoogleHotelsSortBy](/toolkits/search/reference#googlehotelssortby)), optional)_: The sorting order of the results. Defaults to RELEVANCE.
+- **`num_results`** _(int, optional)_: Maximum number of results to return. Defaults to 5. Max 20.
+
+
+
+
+## Auth
+
+The Arcade Google Hotels toolkit uses the [SerpAPI](https://serpapi.com/) to search for hotels from Google Hotels.
+
+- **Secret:**
+ - `SERP_API_KEY`: Your SerpAPI API key.
+
+
+ Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](/home/install/overview) Arcade. If you're using Arcade Cloud, the secret is already set for you. To manage your secrets, go to the [Secrets page](https://api.arcade.dev/dashboard/auth/secrets) in the Arcade Dashboard.
+
diff --git a/pages/toolkits/search/google_jobs.mdx b/pages/toolkits/search/google_jobs.mdx
new file mode 100644
index 000000000..e8b9317e9
--- /dev/null
+++ b/pages/toolkits/search/google_jobs.mdx
@@ -0,0 +1,104 @@
+# Google Jobs
+
+import ToolInfo from "@/components/ToolInfo";
+import Badges from "@/components/Badges";
+import TabbedCodeBlock from "@/components/TabbedCodeBlock";
+import TableOfContents from "@/components/TableOfContents";
+
+
+
+
+
+The Arcade Google Jobs toolkit provides a pre-built set of tools for interacting with Google Jobs. These tools make it easy to build agents and AI apps that can:
+
+- Search for job openings with Google Jobs.
+
+## Install
+
+```bash
+pip install arcade_search
+```
+
+
+ pip installing the toolkit is only needed if you are [self-hosting](/home/install/overview) Arcade. You do not need to install the toolkit if you're using Arcade Cloud.
+
+
+## Available Tools
+
+
+
+
+ If you need to perform an action that's not listed here, you can [get in touch
+ with us](mailto:contact@arcade.dev) to request a new tool, or [create your
+ own tools](/home/build-tools/create-a-toolkit).
+
+
+## SearchJobs
+
+
+
+
+Search for job openings with Google Jobs.
+
+**Parameters**
+
+- **`query`** _(string, required)_ Search query. Provide a job title, company name, and/or any keywords in general representing what kind of jobs the user is looking for.
+- **`location`** _(string, optional, Defaults to `None`)_ Location to search for jobs. E.g. 'United States' or 'New York, NY'. Defaults to None.
+- **`language`** _(string, optional, Defaults to 'en' English)_ 2-character language code to use in the Google Jobs search.
+- **`limit`** _(int, optional, Defaults to 10)_ Maximum number of results to retrieve. Defaults to 10 (max supported by the API).
+- **`next_page_token`** _(string, optional, Defaults to `None`)_ Next page token to paginate results. Defaults to None (start from the first page).
+
+## Auth
+
+The Arcade Google Jobs toolkit uses the [SerpAPI](https://serpapi.com/) to get job data from Google Jobs.
+
+- **Secret:**
+ - `SERP_API_KEY`: Your SerpAPI API key.
+
+ Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](/home/install/overview) Arcade. If you're using Arcade Cloud, the secret is already set for you. To manage your secrets, go to the [Secrets page](https://api.arcade.dev/dashboard/auth/secrets) in the Arcade Dashboard.
+
+
+## Default parameters
+
+Language is configurable through environment variables. When set, they will be used as default for Google Jobs tools.
+
+Providing a different value as `language` argument in a tool call will override the default value.
+
+**Language**
+
+The language code is a 2-character code that determines the language in which the API will search and return news articles. There are two environment variables:
+
+- `ARCADE_GOOGLE_LANGUAGE`: a default value for all Google search tools. If not set, defaults to 'en' (English).
+- `ARCADE_GOOGLE_JOBS_LANGUAGE`: a default value for the jobs search tools. If not set, defaults to `ARCADE_GOOGLE_LANGUAGE`.
+
+A list of supported language codes can be found [here](/toolkits/search/reference#languagecodes).
diff --git a/pages/toolkits/search/google_maps.mdx b/pages/toolkits/search/google_maps.mdx
new file mode 100644
index 000000000..20ca73fc9
--- /dev/null
+++ b/pages/toolkits/search/google_maps.mdx
@@ -0,0 +1,178 @@
+# Google Maps
+
+import ToolInfo from "@/components/ToolInfo";
+import Badges from "@/components/Badges";
+import TabbedCodeBlock from "@/components/TabbedCodeBlock";
+import TableOfContents from "@/components/TableOfContents";
+
+
+
+
+
+The Arcade Google Maps toolkit provides a pre-built set of tools for interacting with Google Maps. These tools make it easy to build agents and AI apps that can:
+
+- Get directions to a location using an address or latitude/longitude.
+
+## Install
+
+```bash
+pip install arcade_search
+```
+
+
+ pip installing the toolkit is only needed if you are [self-hosting](/home/install/overview) Arcade. You do not need to install the toolkit if you're using Arcade Cloud.
+
+
+## Available Tools
+
+
+
+
+ If you need to perform an action that's not listed here, you can [get in touch
+ with us](mailto:contact@arcade.dev) to request a new tool, or [create your
+ own tools](/home/build-tools/create-a-toolkit).
+
+
+## GetDirectionsBetweenAddresses
+
+
+
+
+Get directions between two addresses.
+
+**Parameters**
+
+- **`origin_address`** _(string, required)_ The origin address. Example: '123 Main St, New York, NY 10001'.
+- **`destination_address`** _(string, required)_ The destination address. Example: '456 Main St, New York, NY 10001'.
+- **`language`** _(string, optional, Defaults to 'en' English)_ 2-character language code to use in the Google Maps search. A list of supported language codes can be found [here](/toolkits/search/reference#languagecodes).
+- **`country`** _(string, optional, Defaults to `None`)_ 2-character country code to use in the Google Maps search. A list of supported country codes can be found [here](/toolkits/search/reference#countrycodes).
+- **`distance_unit`** _(enum ([GoogleMapsDistanceUnit](/toolkits/search/reference#googlemapsdistanceunit)), optional, Defaults to `GoogleMapsDistanceUnit.KM`)_ Distance unit to use in the Google Maps search.
+- **`travel_mode`** _(enum ([GoogleMapsTravelMode](/toolkits/search/reference#googlemapstravelmode)), optional, Defaults to `GoogleMapsTravelMode.BEST`)_ Travel mode to use in the Google Maps search.
+
+## GetDirectionsBetweenCoordinates
+
+
+
+
+Get directions between two latitude/longitude coordinates.
+
+**Parameters**
+
+- **`origin_latitude`** _(float, required)_ The origin latitude.
+- **`origin_longitude`** _(float, required)_ The origin longitude.
+- **`destination_latitude`** _(float, required)_ The destination latitude.
+- **`destination_longitude`** _(float, required)_ The destination longitude.
+- **`language`** _(string, optional, Defaults to 'en' English)_ 2-character language code to use in the Google Maps search. A list of supported language codes can be found [here](/toolkits/search/reference#languagecodes).
+- **`country`** _(string, optional, Defaults to `None`)_ 2-character country code to use in the Google Maps search. A list of supported country codes can be found [here](/toolkits/search/reference#countrycodes).
+- **`distance_unit`** _(enum ([GoogleMapsDistanceUnit](/toolkits/search/reference#googlemapsdistanceunit)), optional, Defaults to `GoogleMapsDistanceUnit.KM`)_ Distance unit to use in the Google Maps search.
+- **`travel_mode`** _(enum ([GoogleMapsTravelMode](/toolkits/search/reference#googlemapstravelmode)), optional, Defaults to `GoogleMapsTravelMode.BEST`)_ Travel mode to use in the Google Maps search.
+
+## Auth
+
+The Arcade Google Maps toolkit uses the [SerpAPI](https://serpapi.com/) to get directions.
+
+- **Secret:**
+ - `SERP_API_KEY`: Your SerpAPI API key.
+
+ Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](/home/install/overview) Arcade. If you're using Arcade Cloud, the secret is already set for you. To manage your secrets, go to the [Secrets page](https://api.arcade.dev/dashboard/auth/secrets) in the Arcade Dashboard.
+
+
+## Default parameters
+
+Language, Country, Distance Unit, and Travel Mode are configurable through environment variables. When set, they will be used as default for Google Maps tools.
+
+Providing a different value as `language`, `country`, `distance_unit`, or `travel_mode` argument in a tool call will override the default value.
+
+**Language**
+
+The language code is a 2-character code that determines the language in which the API will search and return directions. There are two environment variables:
+
+- `ARCADE_GOOGLE_LANGUAGE`: a default value for all Google tools. If not set, defaults to 'en' (English).
+- `ARCADE_GOOGLE_MAPS_LANGUAGE`: a default value for the Google Maps tools. If not set, defaults to `ARCADE_GOOGLE_LANGUAGE`.
+
+A list of supported language codes can be found [here](/toolkits/search/reference#languagecodes).
+
+**Country**
+
+The country code is a 2-character code that determines the country in which the API will search for directions:
+
+- `ARCADE_GOOGLE_MAPS_COUNTRY`: a default value for the Google Maps tools. If not set, defaults to `None`.
+
+A list of supported country codes can be found [here](/toolkits/search/reference#countrycodes).
+
+**Distance Unit**
+
+The distance unit is a string that determines the unit of distance to use in the Google Maps search:
+
+- `ARCADE_GOOGLE_MAPS_DISTANCE_UNIT`: a default value for the Google Maps tools. If not set, defaults to `GoogleMapsDistanceUnit.KM`.
+
+A list of supported distance units can be found [here](/toolkits/search/reference#googlemapsdistanceunit).
+
+**Travel Mode**
+
+The travel mode is a string that determines the mode of travel to use in the Google Maps search:
+
+- `ARCADE_GOOGLE_MAPS_TRAVEL_MODE`: a default value for the Google Maps tools. If not set, defaults to `GoogleMapsTravelMode.BEST`.
+
+A list of supported travel modes can be found [here](/toolkits/search/reference#googlemapstravelmode).
+- **Secret:**
+ - `SERP_API_KEY`: Your SerpAPI API key.
+
+ Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](/home/install/overview) Arcade. If you're using Arcade Cloud, the secret is already set for you. To manage your secrets, go to the [Secrets page](https://api.arcade.dev/dashboard/auth/secrets) in the Arcade Dashboard.
+
diff --git a/pages/toolkits/search/google_news.mdx b/pages/toolkits/search/google_news.mdx
new file mode 100644
index 000000000..cbfa3ddaf
--- /dev/null
+++ b/pages/toolkits/search/google_news.mdx
@@ -0,0 +1,115 @@
+# Google News
+
+import ToolInfo from "@/components/ToolInfo";
+import Badges from "@/components/Badges";
+import TabbedCodeBlock from "@/components/TabbedCodeBlock";
+import TableOfContents from "@/components/TableOfContents";
+
+
+
+
+
+The Arcade Google News toolkit provides a pre-built set of tools for interacting with Google News. These tools make it easy to build agents and AI apps that can:
+
+- Search for news stories with Google News.
+
+## Install
+
+```bash
+pip install arcade_search
+```
+
+
+ pip installing the toolkit is only needed if you are [self-hosting](/home/install/overview) Arcade. You do not need to install the toolkit if you're using Arcade Cloud.
+
+
+## Available Tools
+
+
+
+
+ If you need to perform an action that's not listed here, you can [get in touch
+ with us](mailto:contact@arcade.dev) to request a new tool, or [create your
+ own tools](/home/build-tools/create-a-toolkit).
+
+
+## SearchNews
+
+
+
+
+Search for news stories with Google News.
+
+**Parameters**
+
+- **`query`** _(string, required)_ Keywords to search for news articles. E.g. 'Apple launches new iPhone'.
+- **`country_code`** _(string, optional, Defaults to `None`)_ 2-character country code to search for news articles. E.g. 'us' (United States). Defaults to `None` (search news globally).
+- **`language`** _(string, optional, Defaults to 'en' English)_ 2-character language code to search for news articles. E.g. 'en' (English). Defaults to 'en' (English).
+- **`limit`** _(int, optional, Defaults to `None`)_ Maximum number of news articles to return. Defaults to None (returns all results found by the API).
+
+## Auth
+
+The Arcade Google News toolkit uses the [SerpAPI](https://serpapi.com/) to get news data from Google News.
+
+- **Secret:**
+ - `SERP_API_KEY`: Your SerpAPI API key.
+
+ Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](/home/install/overview) Arcade. If you're using Arcade Cloud, the secret is already set for you. To manage your secrets, go to the [Secrets page](https://api.arcade.dev/dashboard/auth/secrets) in the Arcade Dashboard.
+
+
+## Default parameters
+
+Language and Country are configurable through environment variables. When set, they will be used as default for Google News tools.
+
+Providing a different value as `language_code` or `country_code` argument in the tool call will override the default value.
+
+**Language**
+
+The language code is a 2-character code that determines the language in which the API will search and return news articles. There are two environment variables:
+
+- `ARCADE_GOOGLE_LANGUAGE`: a default value for all Google search tools. If not set, defaults to 'en' (English).
+- `ARCADE_GOOGLE_NEWS_LANGUAGE`: a default value for the news search tools. If not set, defaults to `ARCADE_GOOGLE_LANGUAGE`.
+
+A list of supported language codes can be found [here](/toolkits/search/reference#languagecodes).
+
+**Country**
+
+The country code is a 2-character code that determines the country in which the API will search for news articles. There are two environment variables:
+
+- `ARCADE_GOOGLE_NEWS_COUNTRY`: a default value for the `SearchNews` tool. If not set, defaults to `None` (search news globally).
+
+A list of supported country codes can be found [here](/toolkits/search/reference#countrycodes).
diff --git a/pages/toolkits/development/search.mdx b/pages/toolkits/search/google_search.mdx
similarity index 67%
rename from pages/toolkits/development/search.mdx
rename to pages/toolkits/search/google_search.mdx
index a18dddc15..2ef519f12 100644
--- a/pages/toolkits/development/search.mdx
+++ b/pages/toolkits/search/google_search.mdx
@@ -1,4 +1,4 @@
-# Search
+# Google Search
import ToolInfo from "@/components/ToolInfo";
import Badges from "@/components/Badges";
@@ -51,18 +51,18 @@ pip install arcade_search
label: "Call the Tool Directly",
content: {
Python: [
- "/examples/integrations/toolkits/search/search_google_example_call_tool.py",
+ "/examples/integrations/toolkits/search/google_search/search_google_example_call_tool.py",
],
- JavaScript: ["/examples/integrations/toolkits/search/search_google_example_call_tool.js"],
+ JavaScript: ["/examples/integrations/toolkits/search/google_search/search_google_example_call_tool.js"],
},
},
{
label: "Execute the Tool with OpenAI",
content: {
Python: [
- "/examples/integrations/toolkits/search/search_google_example_llm_oai.py",
+ "/examples/integrations/toolkits/search/google_search/search_google_example_llm_oai.py",
],
- JavaScript: ["/examples/integrations/toolkits/search/search_google_example_llm_oai.js"],
+ JavaScript: ["/examples/integrations/toolkits/search/google_search/search_google_example_llm_oai.js"],
},
},
]}
@@ -70,11 +70,6 @@ pip install arcade_search
Search Google using SerpAPI and return organic search results.
-**Auth:**
-
-- **Environment Variables Required:**
- - `SERP_API_KEY`: Your SerpAPI API key.
-
**Parameters**
- **`query`** _(string, required)_ The search query.
@@ -82,8 +77,10 @@ Search Google using SerpAPI and return organic search results.
## Auth
-The Arcade Search toolkit uses the [SerpAPI](https://serpapi.com/) to connect to users' Google accounts.
-
-**Global Environment Variables:**
+The Arcade Google Search toolkit uses the [SerpAPI](https://serpapi.com/) to get get results from a Google search.
-- `SERP_API_KEY`: Your SerpAPI API key.
+- **Secret:**
+ - `SERP_API_KEY`: Your SerpAPI API key.
+
+ Setting the `SERP_API_KEY` secret is only required if you are [self-hosting](/home/install/overview) Arcade. If you're using Arcade Cloud, the secret is already set for you. To manage your secrets, go to the [Secrets page](https://api.arcade.dev/dashboard/auth/secrets) in the Arcade Dashboard.
+
diff --git a/pages/toolkits/search/reference.mdx b/pages/toolkits/search/reference.mdx
new file mode 100644
index 000000000..f6e280760
--- /dev/null
+++ b/pages/toolkits/search/reference.mdx
@@ -0,0 +1,358 @@
+# Reference for Search Toolkit
+
+## GoogleMapsDistanceUnit
+
+Distance unit to use in the Google Maps search.
+
+- **`KM`**: Kilometers.
+- **`MI`**: Miles.
+
+## GoogleMapsTravelMode
+
+Travel mode to use in the Google Maps search.
+
+- **`BEST`**: Best mode.
+- **`DRIVING`**: Driving mode.
+- **`MOTORCYCLE`**: Motorcycle mode.
+- **`PUBLIC_TRANSPORTATION`**: Public transportation mode.
+- **`WALKING`**: Walking mode.
+- **`BICYCLE`**: Bicycling mode.
+- **`FLIGHT`**: Flight mode.
+
+
+## GoogleFinanceWindow
+
+Defines the time window for fetching stock data from Google Finance.
+
+- **`ONE_DAY`**: Represents a 1-day time window.
+- **`FIVE_DAYS`**: Represents a 5-day time window.
+- **`ONE_MONTH`**: Represents a 1-month time window.
+- **`SIX_MONTHS`**: Represents a 6-month time window.
+- **`YEAR_TO_DATE`**: Represents the time from the start of the year to the current date.
+- **`ONE_YEAR`**: Represents a 1-year time window.
+- **`FIVE_YEARS`**: Represents a 5-year time window.
+- **`MAX`**: Represents the maximum available time window.
+
+
+
+## GoogleFlightsMaxStops
+
+Defines the maximum number of stops for flights.
+
+- **`ANY`**: Any number of stops is allowed.
+- **`NONSTOP`**: Only nonstop flights are allowed.
+- **`ONE`**: Only flights with one stop are allowed.
+- **`TWO`**: Only flights with two stops are allowed.
+
+## GoogleFlightsSortBy
+
+Defines the sorting options for flight search results.
+
+- **`TOP_FLIGHTS`**: Sort by the best available flights.
+- **`PRICE`**: Sort by the lowest price.
+- **`DEPARTURE_TIME`**: Sort by the earliest departure time.
+- **`ARRIVAL_TIME`**: Sort by the earliest arrival time.
+- **`DURATION`**: Sort by the shortest flight duration.
+- **`EMISSIONS`**: Sort by the lowest carbon emissions.
+
+## GoogleFlightsTravelClass
+
+Defines the travel class options for flights.
+
+- **`ECONOMY`**: Economy class.
+- **`PREMIUM_ECONOMY`**: Premium economy class.
+- **`BUSINESS`**: Business class.
+- **`FIRST`**: First class.
+
+
+## GoogleHotelsSortBy
+
+Defines the sorting options for hotel search results.
+
+- **`RELEVANCE`**: Sort by the most relevant results.
+- **`LOWEST_PRICE`**: Sort by the lowest price available.
+- **`HIGHEST_RATING`**: Sort by the highest customer ratings.
+- **`MOST_REVIEWED`**: Sort by the most reviewed hotels.
+
+
+## LanguageCodes
+
+- **`ar`**: Arabic
+- **`bn`**: Bengali
+- **`da`**: Danish
+- **`de`**: German
+- **`el`**: Greek
+- **`en`**: English
+- **`es`**: Spanish
+- **`fi`**: Finnish
+- **`fr`**: French
+- **`hi`**: Hindi
+- **`hu`**: Hungarian
+- **`id`**: Indonesian
+- **`it`**: Italian
+- **`ja`**: Japanese
+- **`ko`**: Korean
+- **`ms`**: Malay
+- **`nl`**: Dutch
+- **`no`**: Norwegian
+- **`pcm`**: Nigerian Pidgin
+- **`pl`**: Polish
+- **`pt`**: Portuguese
+- **`pt-br`**: Portuguese (Brazil)
+- **`pt-pt`**: Portuguese (Portugal)
+- **`ru`**: Russian
+- **`sv`**: Swedish
+- **`tl`**: Filipino
+- **`tr`**: Turkish
+- **`uk`**: Ukrainian
+- **`zh`**: Chinese
+- **`zh-cn`**: Chinese (Simplified)
+- **`zh-tw`**: Chinese (Traditional)
+
+
+## CountryCodes
+
+- **`af`**: Afghanistan
+- **`al`**: Albania
+- **`dz`**: Algeria
+- **`as`**: American Samoa
+- **`ad`**: Andorra
+- **`ao`**: Angola
+- **`ai`**: Anguilla
+- **`aq`**: Antarctica
+- **`ag`**: Antigua and Barbuda
+- **`ar`**: Argentina
+- **`am`**: Armenia
+- **`aw`**: Aruba
+- **`au`**: Australia
+- **`at`**: Austria
+- **`az`**: Azerbaijan
+- **`bs`**: Bahamas
+- **`bh`**: Bahrain
+- **`bd`**: Bangladesh
+- **`bb`**: Barbados
+- **`by`**: Belarus
+- **`be`**: Belgium
+- **`bz`**: Belize
+- **`bj`**: Benin
+- **`bm`**: Bermuda
+- **`bt`**: Bhutan
+- **`bo`**: Bolivia
+- **`ba`**: Bosnia and Herzegovina
+- **`bw`**: Botswana
+- **`bv`**: Bouvet Island
+- **`br`**: Brazil
+- **`io`**: British Indian Ocean Territory
+- **`bn`**: Brunei Darussalam
+- **`bg`**: Bulgaria
+- **`bf`**: Burkina Faso
+- **`bi`**: Burundi
+- **`kh`**: Cambodia
+- **`cm`**: Cameroon
+- **`ca`**: Canada
+- **`cv`**: Cape Verde
+- **`ky`**: Cayman Islands
+- **`cf`**: Central African Republic
+- **`td`**: Chad
+- **`cl`**: Chile
+- **`cn`**: China
+- **`cx`**: Christmas Island
+- **`cc`**: Cocos (Keeling) Islands
+- **`co`**: Colombia
+- **`km`**: Comoros
+- **`cg`**: Congo
+- **`cd`**: Congo, the Democratic Republic of the
+- **`ck`**: Cook Islands
+- **`cr`**: Costa Rica
+- **`ci`**: Cote D'ivoire
+- **`hr`**: Croatia
+- **`cu`**: Cuba
+- **`cy`**: Cyprus
+- **`cz`**: Czech Republic
+- **`dk`**: Denmark
+- **`dj`**: Djibouti
+- **`dm`**: Dominica
+- **`do`**: Dominican Republic
+- **`ec`**: Ecuador
+- **`eg`**: Egypt
+- **`sv`**: El Salvador
+- **`gq`**: Equatorial Guinea
+- **`er`**: Eritrea
+- **`ee`**: Estonia
+- **`et`**: Ethiopia
+- **`fk`**: Falkland Islands (Malvinas)
+- **`fo`**: Faroe Islands
+- **`fj`**: Fiji
+- **`fi`**: Finland
+- **`fr`**: France
+- **`gf`**: French Guiana
+- **`pf`**: French Polynesia
+- **`tf`**: French Southern Territories
+- **`ga`**: Gabon
+- **`gm`**: Gambia
+- **`ge`**: Georgia
+- **`de`**: Germany
+- **`gh`**: Ghana
+- **`gi`**: Gibraltar
+- **`gr`**: Greece
+- **`gl`**: Greenland
+- **`gd`**: Grenada
+- **`gp`**: Guadeloupe
+- **`gu`**: Guam
+- **`gt`**: Guatemala
+- **`gg`**: Guernsey
+- **`gn`**: Guinea
+- **`gw`**: Guinea-Bissau
+- **`gy`**: Guyana
+- **`ht`**: Haiti
+- **`hm`**: Heard Island and Mcdonald Islands
+- **`va`**: Holy See (Vatican City State)
+- **`hn`**: Honduras
+- **`hk`**: Hong Kong
+- **`hu`**: Hungary
+- **`is`**: Iceland
+- **`in`**: India
+- **`id`**: Indonesia
+- **`ir`**: Iran, Islamic Republic of
+- **`iq`**: Iraq
+- **`ie`**: Ireland
+- **`im`**: Isle of Man
+- **`il`**: Israel
+- **`it`**: Italy
+- **`je`**: Jersey
+- **`jm`**: Jamaica
+- **`jp`**: Japan
+- **`jo`**: Jordan
+- **`kz`**: Kazakhstan
+- **`ke`**: Kenya
+- **`ki`**: Kiribati
+- **`kp`**: Korea, Democratic People's Republic of
+- **`kr`**: Korea, Republic of
+- **`kw`**: Kuwait
+- **`kg`**: Kyrgyzstan
+- **`la`**: Lao People's Democratic Republic
+- **`lv`**: Latvia
+- **`lb`**: Lebanon
+- **`ls`**: Lesotho
+- **`lr`**: Liberia
+- **`ly`**: Libyan Arab Jamahiriya
+- **`li`**: Liechtenstein
+- **`lt`**: Lithuania
+- **`lu`**: Luxembourg
+- **`mo`**: Macao
+- **`mk`**: Macedonia, the Former Yugosalv Republic of
+- **`mg`**: Madagascar
+- **`mw`**: Malawi
+- **`my`**: Malaysia
+- **`mv`**: Maldives
+- **`ml`**: Mali
+- **`mt`**: Malta
+- **`mh`**: Marshall Islands
+- **`mq`**: Martinique
+- **`mr`**: Mauritania
+- **`mu`**: Mauritius
+- **`yt`**: Mayotte
+- **`mx`**: Mexico
+- **`fm`**: Micronesia, Federated States of
+- **`md`**: Moldova, Republic of
+- **`mc`**: Monaco
+- **`mn`**: Mongolia
+- **`me`**: Montenegro
+- **`ms`**: Montserrat
+- **`ma`**: Morocco
+- **`mz`**: Mozambique
+- **`mm`**: Myanmar
+- **`na`**: Namibia
+- **`nr`**: Nauru
+- **`np`**: Nepal
+- **`nl`**: Netherlands
+- **`an`**: Netherlands Antilles
+- **`nc`**: New Caledonia
+- **`nz`**: New Zealand
+- **`ni`**: Nicaragua
+- **`ne`**: Niger
+- **`ng`**: Nigeria
+- **`nu`**: Niue
+- **`nf`**: Norfolk Island
+- **`mp`**: Northern Mariana Islands
+- **`no`**: Norway
+- **`om`**: Oman
+- **`pk`**: Pakistan
+- **`pw`**: Palau
+- **`ps`**: Palestinian Territory, Occupied
+- **`pa`**: Panama
+- **`pg`**: Papua New Guinea
+- **`py`**: Paraguay
+- **`pe`**: Peru
+- **`ph`**: Philippines
+- **`pn`**: Pitcairn
+- **`pl`**: Poland
+- **`pt`**: Portugal
+- **`pr`**: Puerto Rico
+- **`qa`**: Qatar
+- **`re`**: Reunion
+- **`ro`**: Romania
+- **`ru`**: Russian Federation
+- **`rw`**: Rwanda
+- **`sh`**: Saint Helena
+- **`kn`**: Saint Kitts and Nevis
+- **`lc`**: Saint Lucia
+- **`pm`**: Saint Pierre and Miquelon
+- **`vc`**: Saint Vincent and the Grenadines
+- **`ws`**: Samoa
+- **`sm`**: San Marino
+- **`st`**: Sao Tome and Principe
+- **`sa`**: Saudi Arabia
+- **`sn`**: Senegal
+- **`rs`**: Serbia
+- **`sc`**: Seychelles
+- **`sl`**: Sierra Leone
+- **`sg`**: Singapore
+- **`sk`**: Slovakia
+- **`si`**: Slovenia
+- **`sb`**: Solomon Islands
+- **`so`**: Somalia
+- **`za`**: South Africa
+- **`gs`**: South Georgia and the South Sandwich Islands
+- **`es`**: Spain
+- **`lk`**: Sri Lanka
+- **`sd`**: Sudan
+- **`sr`**: Suriname
+- **`sj`**: Svalbard and Jan Mayen
+- **`sz`**: Swaziland
+- **`se`**: Sweden
+- **`ch`**: Switzerland
+- **`sy`**: Syrian Arab Republic
+- **`tw`**: Taiwan, Province of China
+- **`tj`**: Tajikistan
+- **`tz`**: Tanzania, United Republic of
+- **`th`**: Thailand
+- **`tl`**: Timor-Leste
+- **`tg`**: Togo
+- **`tk`**: Tokelau
+- **`to`**: Tonga
+- **`tt`**: Trinidad and Tobago
+- **`tn`**: Tunisia
+- **`tr`**: Turkiye
+- **`tm`**: Turkmenistan
+- **`tc`**: Turks and Caicos Islands
+- **`tv`**: Tuvalu
+- **`ug`**: Uganda
+- **`ua`**: Ukraine
+- **`ae`**: United Arab Emirates
+- **`uk`**: United Kingdom
+- **`gb`**: United Kingdom
+- **`us`**: United States
+- **`um`**: United States Minor Outlying Islands
+- **`uy`**: Uruguay
+- **`uz`**: Uzbekistan
+- **`vu`**: Vanuatu
+- **`ve`**: Venezuela
+- **`vn`**: Viet Nam
+- **`vg`**: Virgin Islands, British
+- **`vi`**: Virgin Islands, U.S.
+- **`wf`**: Wallis and Futuna
+- **`eh`**: Western Sahara
+- **`ye`**: Yemen
+- **`zm`**: Zambia
+- **`zw`**: Zimbabwe
diff --git a/public/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_call_tool.js b/public/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_call_tool.js
new file mode 100644
index 000000000..52644dc8f
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_call_tool.js
@@ -0,0 +1,20 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "you@example.com";
+const TOOL_NAME = "Search.GetStockHistoricalData";
+
+const toolInput = {
+ ticker_symbol: "GOOG",
+ exchange_identifier: "NASDAQ",
+ window: "ONE_MONTH",
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(response);
diff --git a/public/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_call_tool.py b/public/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_call_tool.py
new file mode 100644
index 000000000..5adb32734
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_call_tool.py
@@ -0,0 +1,19 @@
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "you@example.com"
+TOOL_NAME = "Search.GetStockHistoricalData"
+
+tool_input = {
+ "ticker_symbol": "GOOG",
+ "exchange_identifier": "NASDAQ",
+ "window": "ONE_MONTH",
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(response)
diff --git a/public/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_llm_oai.js b/public/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_llm_oai.js
new file mode 100644
index 000000000..ae5cf0c4b
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_llm_oai.js
@@ -0,0 +1,21 @@
+import OpenAI from "openai";
+
+const USER_ID = "you@example.com";
+const PROMPT =
+ "Get the stock historical data for Google on the NASDAQ exchange.";
+const TOOL_NAME = "Search.GetStockHistoricalData";
+
+const client = new OpenAI({
+ baseURL: "https://api.arcade.dev",
+ apiKey: process.env.ARCADE_API_KEY,
+});
+
+const response = await client.chat.completions.create({
+ messages: [{ role: "user", content: PROMPT }],
+ model: "gpt-4o-mini",
+ user: USER_ID,
+ tools: [TOOL_NAME],
+ tool_choice: "generate",
+});
+
+console.log(response.choices[0].message.content);
diff --git a/public/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_llm_oai.py b/public/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_llm_oai.py
new file mode 100644
index 000000000..a5c9376d8
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_finance/get_stock_historical_data_example_llm_oai.py
@@ -0,0 +1,21 @@
+import os
+from openai import OpenAI
+
+USER_ID = "you@example.com"
+PROMPT = "Get the stock historical data for Google on the NASDAQ exchange."
+TOOL_NAME = "Search.GetStockHistoricalData"
+
+client = OpenAI(
+ base_url="https://api.arcade.dev", api_key=os.environ.get("ARCADE_API_KEY")
+)
+
+response = client.chat.completions.create(
+ messages=[
+ {"role": "user", "content": PROMPT},
+ ],
+ model="gpt-4o-mini",
+ user=USER_ID,
+ tools=[TOOL_NAME],
+ tool_choice="generate",
+)
+print(response.choices[0].message.content)
diff --git a/public/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_call_tool.js b/public/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_call_tool.js
new file mode 100644
index 000000000..516ebbf73
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_call_tool.js
@@ -0,0 +1,19 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "you@example.com";
+const TOOL_NAME = "Search.GetStockSummary";
+
+const toolInput = {
+ ticker_symbol: "GOOG",
+ exchange_identifier: "NASDAQ",
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(response);
diff --git a/public/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_call_tool.py b/public/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_call_tool.py
new file mode 100644
index 000000000..50a53cdc0
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_call_tool.py
@@ -0,0 +1,18 @@
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "you@example.com"
+TOOL_NAME = "Search.GetStockSummary"
+
+tool_input = {
+ "ticker_symbol": "GOOG",
+ "exchange_identifier": "NASDAQ",
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(response)
diff --git a/public/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_llm_oai.js b/public/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_llm_oai.js
new file mode 100644
index 000000000..2043487a3
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_llm_oai.js
@@ -0,0 +1,21 @@
+import OpenAI from "openai";
+
+const USER_ID = "you@example.com";
+const PROMPT =
+ "Get the stock summary for Google on the NASDAQ exchange.";
+const TOOL_NAME = "Search.GetStockSummary";
+
+const client = new OpenAI({
+ baseURL: "https://api.arcade.dev",
+ apiKey: process.env.ARCADE_API_KEY,
+});
+
+const response = await client.chat.completions.create({
+ messages: [{ role: "user", content: PROMPT }],
+ model: "gpt-4o-mini",
+ user: USER_ID,
+ tools: [TOOL_NAME],
+ tool_choice: "generate",
+});
+
+console.log(response.choices[0].message.content);
diff --git a/public/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_llm_oai.py b/public/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_llm_oai.py
new file mode 100644
index 000000000..32ba6dbcb
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_finance/get_stock_summary_example_llm_oai.py
@@ -0,0 +1,21 @@
+import os
+from openai import OpenAI
+
+USER_ID = "you@example.com"
+PROMPT = "Get the stock summary for Google on the NASDAQ exchange."
+TOOL_NAME = "Search.GetStockSummary"
+
+client = OpenAI(
+ base_url="https://api.arcade.dev", api_key=os.environ.get("ARCADE_API_KEY")
+)
+
+response = client.chat.completions.create(
+ messages=[
+ {"role": "user", "content": PROMPT},
+ ],
+ model="gpt-4o-mini",
+ user=USER_ID,
+ tools=[TOOL_NAME],
+ tool_choice="generate",
+)
+print(response.choices[0].message.content)
diff --git a/public/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_call_tool.js b/public/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_call_tool.js
new file mode 100644
index 000000000..608781d66
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_call_tool.js
@@ -0,0 +1,26 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "you@example.com";
+const TOOL_NAME = "Search.SearchOneWayFlights";
+
+const toolInput = {
+ departure_airport_code: "LAX",
+ arrival_airport_code: "SFO",
+ outbound_date: "2025-09-01",
+ currency_code: "USD",
+ travel_class: "ECONOMY",
+ num_adults: 1,
+ num_children: 0,
+ max_stops: "ANY",
+ sort_by: "TOP_FLIGHTS",
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(response);
diff --git a/public/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_call_tool.py b/public/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_call_tool.py
new file mode 100644
index 000000000..a8ea73094
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_call_tool.py
@@ -0,0 +1,25 @@
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "you@example.com"
+TOOL_NAME = "Search.SearchOneWayFlights"
+
+tool_input = {
+ "departure_airport_code": "LAX",
+ "arrival_airport_code": "SFO",
+ "outbound_date": "2025-09-01",
+ "currency_code": "USD",
+ "travel_class": "ECONOMY",
+ "num_adults": 1,
+ "num_children": 0,
+ "max_stops": "ANY",
+ "sort_by": "TOP_FLIGHTS",
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(response)
diff --git a/public/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_llm_oai.js b/public/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_llm_oai.js
new file mode 100644
index 000000000..1c18d2717
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_llm_oai.js
@@ -0,0 +1,21 @@
+import OpenAI from "openai";
+
+const USER_ID = "you@example.com";
+const PROMPT =
+ "Search for one-way flights from Los Angeles to San Francisco on September 1st, 2025.";
+const TOOL_NAME = "Search.SearchOneWayFlights";
+
+const client = new OpenAI({
+ baseURL: "https://api.arcade.dev",
+ apiKey: process.env.ARCADE_API_KEY,
+});
+
+const response = await client.chat.completions.create({
+ messages: [{ role: "user", content: PROMPT }],
+ model: "gpt-4o-mini",
+ user: USER_ID,
+ tools: [TOOL_NAME],
+ tool_choice: "generate",
+});
+
+console.log(response.choices[0].message.content);
diff --git a/public/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_llm_oai.py b/public/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_llm_oai.py
new file mode 100644
index 000000000..2a9f612d9
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_flights/search_one_way_flights_example_llm_oai.py
@@ -0,0 +1,21 @@
+import os
+from openai import OpenAI
+
+USER_ID = "you@example.com"
+PROMPT = "Search for one-way flights from Los Angeles to San Francisco on September 1st, 2025."
+TOOL_NAME = "Search.SearchOneWayFlights"
+
+client = OpenAI(
+ base_url="https://api.arcade.dev", api_key=os.environ.get("ARCADE_API_KEY")
+)
+
+response = client.chat.completions.create(
+ messages=[
+ {"role": "user", "content": PROMPT},
+ ],
+ model="gpt-4o-mini",
+ user=USER_ID,
+ tools=[TOOL_NAME],
+ tool_choice="generate",
+)
+print(response.choices[0].message.content)
diff --git a/public/examples/integrations/toolkits/search/google_flights/search_roundtrip_flights_example_call_tool.js b/public/examples/integrations/toolkits/search/google_flights/search_roundtrip_flights_example_call_tool.js
new file mode 100644
index 000000000..87efd073a
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_flights/search_roundtrip_flights_example_call_tool.js
@@ -0,0 +1,27 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "you@example.com";
+const TOOL_NAME = "Search.SearchRoundtripFlights";
+
+const toolInput = {
+ departure_airport_code: "LAX",
+ arrival_airport_code: "SFO",
+ outbound_date: "2025-09-01",
+ return_date: "2025-09-05",
+ currency_code: "USD",
+ travel_class: "ECONOMY",
+ num_adults: 1,
+ num_children: 0,
+ max_stops: "ANY",
+ sort_by: "TOP_FLIGHTS",
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(response);
diff --git a/public/examples/integrations/toolkits/search/google_flights/search_roundtrip_flights_example_call_tool.py b/public/examples/integrations/toolkits/search/google_flights/search_roundtrip_flights_example_call_tool.py
new file mode 100644
index 000000000..e17f11ed3
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_flights/search_roundtrip_flights_example_call_tool.py
@@ -0,0 +1,26 @@
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "you@example.com"
+TOOL_NAME = "Search.SearchRoundtripFlights"
+
+tool_input = {
+ "departure_airport_code": "LAX",
+ "arrival_airport_code": "SFO",
+ "outbound_date": "2025-09-01",
+ "return_date": "2025-09-05",
+ "currency_code": "USD",
+ "travel_class": "ECONOMY",
+ "num_adults": 1,
+ "num_children": 0,
+ "max_stops": "ANY",
+ "sort_by": "TOP_FLIGHTS",
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(response)
diff --git a/public/examples/integrations/toolkits/search/google_flights/search_roundtrip_flights_example_llm_oai.js b/public/examples/integrations/toolkits/search/google_flights/search_roundtrip_flights_example_llm_oai.js
new file mode 100644
index 000000000..d0a51cd6e
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_flights/search_roundtrip_flights_example_llm_oai.js
@@ -0,0 +1,21 @@
+import OpenAI from "openai";
+
+const USER_ID = "you@example.com";
+const PROMPT =
+ "Search for roundtrip flights from Los Angeles to San Francisco on September 1st, 2025, returning on September 5th, 2025.";
+const TOOL_NAME = "Search.SearchRoundtripFlights";
+
+const client = new OpenAI({
+ baseURL: "https://api.arcade.dev",
+ apiKey: process.env.ARCADE_API_KEY,
+});
+
+const response = await client.chat.completions.create({
+ messages: [{ role: "user", content: PROMPT }],
+ model: "gpt-4o-mini",
+ user: USER_ID,
+ tools: [TOOL_NAME],
+ tool_choice: "generate",
+});
+
+console.log(response.choices[0].message.content);
diff --git a/public/examples/integrations/toolkits/search/google_flights/search_roundtrip_flights_example_llm_oai.py b/public/examples/integrations/toolkits/search/google_flights/search_roundtrip_flights_example_llm_oai.py
new file mode 100644
index 000000000..076591c84
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_flights/search_roundtrip_flights_example_llm_oai.py
@@ -0,0 +1,21 @@
+import os
+from openai import OpenAI
+
+USER_ID = "you@example.com"
+PROMPT = "Search for roundtrip flights from Los Angeles to San Francisco on September 1st, 2025, returning on September 5th, 2025."
+TOOL_NAME = "Search.SearchRoundtripFlights"
+
+client = OpenAI(
+ base_url="https://api.arcade.dev", api_key=os.environ.get("ARCADE_API_KEY")
+)
+
+response = client.chat.completions.create(
+ messages=[
+ {"role": "user", "content": PROMPT},
+ ],
+ model="gpt-4o-mini",
+ user=USER_ID,
+ tools=[TOOL_NAME],
+ tool_choice="generate",
+)
+print(response.choices[0].message.content)
diff --git a/public/examples/integrations/toolkits/search/google_hotels/search_hotels_example_call_tool.js b/public/examples/integrations/toolkits/search/google_hotels/search_hotels_example_call_tool.js
new file mode 100644
index 000000000..c7282235a
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_hotels/search_hotels_example_call_tool.js
@@ -0,0 +1,27 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "you@example.com";
+const TOOL_NAME = "Search.SearchHotels";
+
+const toolInput = {
+ location: "New York, NY",
+ check_in_date: "2025-09-01",
+ check_out_date: "2025-09-02",
+ query: "hotel",
+ currency: "USD",
+ min_price: 100,
+ max_price: 500,
+ num_adults: 2,
+ num_children: 0,
+ sort_by: "RELEVANCE",
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(response);
diff --git a/public/examples/integrations/toolkits/search/google_hotels/search_hotels_example_call_tool.py b/public/examples/integrations/toolkits/search/google_hotels/search_hotels_example_call_tool.py
new file mode 100644
index 000000000..dbcb4a982
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_hotels/search_hotels_example_call_tool.py
@@ -0,0 +1,26 @@
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "you@example.com"
+TOOL_NAME = "Search.SearchHotels"
+
+tool_input = {
+ "location": "New York, NY",
+ "check_in_date": "2025-09-01",
+ "check_out_date": "2025-09-02",
+ "query": "hotel",
+ "currency": "USD",
+ "min_price": 100,
+ "max_price": 500,
+ "num_adults": 2,
+ "num_children": 0,
+ "sort_by": "RELEVANCE",
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(response)
diff --git a/public/examples/integrations/toolkits/search/google_hotels/search_hotels_example_llm_oai.js b/public/examples/integrations/toolkits/search/google_hotels/search_hotels_example_llm_oai.js
new file mode 100644
index 000000000..cbfa098ba
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_hotels/search_hotels_example_llm_oai.js
@@ -0,0 +1,21 @@
+import OpenAI from "openai";
+
+const USER_ID = "you@example.com";
+const PROMPT =
+ "Search for hotels in New York, NY for 2 adults on September 1st, 2025, and check out on September 2nd, 2025.";
+const TOOL_NAME = "Search.SearchHotels";
+
+const client = new OpenAI({
+ baseURL: "https://api.arcade.dev",
+ apiKey: process.env.ARCADE_API_KEY,
+});
+
+const response = await client.chat.completions.create({
+ messages: [{ role: "user", content: PROMPT }],
+ model: "gpt-4o-mini",
+ user: USER_ID,
+ tools: [TOOL_NAME],
+ tool_choice: "generate",
+});
+
+console.log(response.choices[0].message.content);
diff --git a/public/examples/integrations/toolkits/search/google_hotels/search_hotels_example_llm_oai.py b/public/examples/integrations/toolkits/search/google_hotels/search_hotels_example_llm_oai.py
new file mode 100644
index 000000000..c5e0e0b2f
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_hotels/search_hotels_example_llm_oai.py
@@ -0,0 +1,21 @@
+import os
+from openai import OpenAI
+
+USER_ID = "you@example.com"
+PROMPT = "Search for hotels in New York, NY for 2 adults on September 1st, 2025, and check out on September 2nd, 2025."
+TOOL_NAME = "Search.SearchHotels"
+
+client = OpenAI(
+ base_url="https://api.arcade.dev", api_key=os.environ.get("ARCADE_API_KEY")
+)
+
+response = client.chat.completions.create(
+ messages=[
+ {"role": "user", "content": PROMPT},
+ ],
+ model="gpt-4o-mini",
+ user=USER_ID,
+ tools=[TOOL_NAME],
+ tool_choice="generate",
+)
+print(response.choices[0].message.content)
diff --git a/public/examples/integrations/toolkits/search/google_jobs/search_jobs_example_call_tool.js b/public/examples/integrations/toolkits/search/google_jobs/search_jobs_example_call_tool.js
new file mode 100644
index 000000000..5c4c56478
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_jobs/search_jobs_example_call_tool.js
@@ -0,0 +1,21 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "you@example.com";
+const TOOL_NAME = "Search.SearchJobs";
+
+const toolInput = {
+ query: "software engineer",
+ location: "United States",
+ language: "en",
+ limit: 10,
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(response);
diff --git a/public/examples/integrations/toolkits/search/google_jobs/search_jobs_example_call_tool.py b/public/examples/integrations/toolkits/search/google_jobs/search_jobs_example_call_tool.py
new file mode 100644
index 000000000..bede86bf3
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_jobs/search_jobs_example_call_tool.py
@@ -0,0 +1,20 @@
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "you@example.com"
+TOOL_NAME = "Search.SearchJobs"
+
+tool_input = {
+ "query": "software engineer",
+ "location": "United States",
+ "language": "en",
+ "limit": 10,
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(response)
diff --git a/public/examples/integrations/toolkits/search/google_jobs/search_jobs_example_llm_oai.js b/public/examples/integrations/toolkits/search/google_jobs/search_jobs_example_llm_oai.js
new file mode 100644
index 000000000..23b900118
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_jobs/search_jobs_example_llm_oai.js
@@ -0,0 +1,21 @@
+import OpenAI from "openai";
+
+const USER_ID = "you@example.com";
+const PROMPT =
+ "Search for 'software engineer' job openings in the United States.";
+const TOOL_NAME = "Search.SearchJobs";
+
+const client = new OpenAI({
+ baseURL: "https://api.arcade.dev",
+ apiKey: process.env.ARCADE_API_KEY,
+});
+
+const response = await client.chat.completions.create({
+ messages: [{ role: "user", content: PROMPT }],
+ model: "gpt-4o-mini",
+ user: USER_ID,
+ tools: [TOOL_NAME],
+ tool_choice: "generate",
+});
+
+console.log(response.choices[0].message.content);
diff --git a/public/examples/integrations/toolkits/search/google_jobs/search_jobs_example_llm_oai.py b/public/examples/integrations/toolkits/search/google_jobs/search_jobs_example_llm_oai.py
new file mode 100644
index 000000000..5c7d1f9e1
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_jobs/search_jobs_example_llm_oai.py
@@ -0,0 +1,21 @@
+import os
+from openai import OpenAI
+
+USER_ID = "you@example.com"
+PROMPT = "Search for 'software engineer' job openings in the United States."
+TOOL_NAME = "Search.SearchJobs"
+
+client = OpenAI(
+ base_url="https://api.arcade.dev", api_key=os.environ.get("ARCADE_API_KEY")
+)
+
+response = client.chat.completions.create(
+ messages=[
+ {"role": "user", "content": PROMPT},
+ ],
+ model="gpt-4o-mini",
+ user=USER_ID,
+ tools=[TOOL_NAME],
+ tool_choice="generate",
+)
+print(response.choices[0].message.content)
diff --git a/public/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_call_tool.js b/public/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_call_tool.js
new file mode 100644
index 000000000..c08f7dd0f
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_call_tool.js
@@ -0,0 +1,21 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "you@example.com";
+const TOOL_NAME = "Search.GetDirectionsBetweenAddresses";
+
+const toolInput = {
+ origin_address: "123 Main St, New York, NY 10001",
+ destination_address: "456 Main St, New York, NY 10001",
+ distance_unit: "KM",
+ travel_mode: "BEST",
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(response);
diff --git a/public/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_call_tool.py b/public/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_call_tool.py
new file mode 100644
index 000000000..a59d1a3ed
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_call_tool.py
@@ -0,0 +1,20 @@
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "you@example.com"
+TOOL_NAME = "Search.GetDirectionsBetweenAddresses"
+
+tool_input = {
+ "origin_address": "123 Main St, New York, NY 10001",
+ "destination_address": "456 Main St, New York, NY 10001",
+ "distance_unit": "KM",
+ "travel_mode": "BEST",
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(response)
diff --git a/public/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_llm_oai.js b/public/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_llm_oai.js
new file mode 100644
index 000000000..a5a21414c
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_llm_oai.js
@@ -0,0 +1,21 @@
+import OpenAI from "openai";
+
+const USER_ID = "you@example.com";
+const PROMPT =
+ "Get directions between '123 Main St, New York, NY 10001' and '456 Main St, New York, NY 10001'.";
+const TOOL_NAME = "Search.GetDirectionsBetweenAddresses";
+
+const client = new OpenAI({
+ baseURL: "https://api.arcade.dev",
+ apiKey: process.env.ARCADE_API_KEY,
+});
+
+const response = await client.chat.completions.create({
+ messages: [{ role: "user", content: PROMPT }],
+ model: "gpt-4o-mini",
+ user: USER_ID,
+ tools: [TOOL_NAME],
+ tool_choice: "generate",
+});
+
+console.log(response.choices[0].message.content);
diff --git a/public/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_llm_oai.py b/public/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_llm_oai.py
new file mode 100644
index 000000000..f744cf894
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_maps/get_directions_between_addresses_example_llm_oai.py
@@ -0,0 +1,21 @@
+import os
+from openai import OpenAI
+
+USER_ID = "you@example.com"
+PROMPT = "Get directions between '123 Main St, New York, NY 10001' and '456 Main St, New York, NY 10001'."
+TOOL_NAME = "Search.GetDirectionsBetweenAddresses"
+
+client = OpenAI(
+ base_url="https://api.arcade.dev", api_key=os.environ.get("ARCADE_API_KEY")
+)
+
+response = client.chat.completions.create(
+ messages=[
+ {"role": "user", "content": PROMPT},
+ ],
+ model="gpt-4o-mini",
+ user=USER_ID,
+ tools=[TOOL_NAME],
+ tool_choice="generate",
+)
+print(response.choices[0].message.content)
diff --git a/public/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_call_tool.js b/public/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_call_tool.js
new file mode 100644
index 000000000..55e9e9e8f
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_call_tool.js
@@ -0,0 +1,23 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "you@example.com";
+const TOOL_NAME = "Search.GetDirectionsBetweenCoordinates";
+
+const toolInput = {
+ origin_latitude: 37.7879,
+ origin_longitude: -122.4076,
+ destination_latitude: 37.8219,
+ destination_longitude: -122.4789,
+ distance_unit: "KM",
+ travel_mode: "BEST",
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(response);
diff --git a/public/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_call_tool.py b/public/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_call_tool.py
new file mode 100644
index 000000000..1a8627de6
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_call_tool.py
@@ -0,0 +1,22 @@
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "you@example.com"
+TOOL_NAME = "Search.GetDirectionsBetweenCoordinates"
+
+tool_input = {
+ "origin_latitude": 37.7879,
+ "origin_longitude": -122.4076,
+ "destination_latitude": 37.8219,
+ "destination_longitude": -122.4789,
+ "distance_unit": "KM",
+ "travel_mode": "BEST",
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(response)
diff --git a/public/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_llm_oai.js b/public/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_llm_oai.js
new file mode 100644
index 000000000..fe97a0528
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_llm_oai.js
@@ -0,0 +1,21 @@
+import OpenAI from "openai";
+
+const USER_ID = "you@example.com";
+const PROMPT =
+ "Get directions between the following coordinates: 37.7879, -122.4076 and 37.8219, -122.4789.";
+const TOOL_NAME = "Search.GetDirectionsBetweenCoordinates";
+
+const client = new OpenAI({
+ baseURL: "https://api.arcade.dev",
+ apiKey: process.env.ARCADE_API_KEY,
+});
+
+const response = await client.chat.completions.create({
+ messages: [{ role: "user", content: PROMPT }],
+ model: "gpt-4o-mini",
+ user: USER_ID,
+ tools: [TOOL_NAME],
+ tool_choice: "generate",
+});
+
+console.log(response.choices[0].message.content);
diff --git a/public/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_llm_oai.py b/public/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_llm_oai.py
new file mode 100644
index 000000000..288669c15
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_maps/get_directions_between_coordinates_example_llm_oai.py
@@ -0,0 +1,21 @@
+import os
+from openai import OpenAI
+
+USER_ID = "you@example.com"
+PROMPT = "Get directions between the following coordinates: 37.7879, -122.4076 and 37.8219, -122.4789."
+TOOL_NAME = "Search.GetDirectionsBetweenCoordinates"
+
+client = OpenAI(
+ base_url="https://api.arcade.dev", api_key=os.environ.get("ARCADE_API_KEY")
+)
+
+response = client.chat.completions.create(
+ messages=[
+ {"role": "user", "content": PROMPT},
+ ],
+ model="gpt-4o-mini",
+ user=USER_ID,
+ tools=[TOOL_NAME],
+ tool_choice="generate",
+)
+print(response.choices[0].message.content)
diff --git a/public/examples/integrations/toolkits/search/google_news/search_news_example_call_tool.js b/public/examples/integrations/toolkits/search/google_news/search_news_example_call_tool.js
new file mode 100644
index 000000000..4a4c9fef1
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_news/search_news_example_call_tool.js
@@ -0,0 +1,18 @@
+import { Arcade } from "@arcadeai/arcadejs";
+
+const client = new Arcade(); // Automatically finds the `ARCADE_API_KEY` env variable
+
+const USER_ID = "you@example.com";
+const TOOL_NAME = "Search.SearchNews";
+
+const toolInput = {
+ query: "Apple's new iPhone",
+};
+
+const response = await client.tools.execute({
+ tool_name: TOOL_NAME,
+ input: toolInput,
+ user_id: USER_ID,
+});
+
+console.log(response);
diff --git a/public/examples/integrations/toolkits/search/google_news/search_news_example_call_tool.py b/public/examples/integrations/toolkits/search/google_news/search_news_example_call_tool.py
new file mode 100644
index 000000000..0eb1e1393
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_news/search_news_example_call_tool.py
@@ -0,0 +1,17 @@
+from arcadepy import Arcade
+
+client = Arcade() # Automatically finds the `ARCADE_API_KEY` env variable
+
+USER_ID = "you@example.com"
+TOOL_NAME = "Search.SearchNews"
+
+tool_input = {
+ "query": "Apple's new iPhone",
+}
+
+response = client.tools.execute(
+ tool_name=TOOL_NAME,
+ input=tool_input,
+ user_id=USER_ID,
+)
+print(response)
diff --git a/public/examples/integrations/toolkits/search/google_news/search_news_example_llm_oai.js b/public/examples/integrations/toolkits/search/google_news/search_news_example_llm_oai.js
new file mode 100644
index 000000000..48f926f64
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_news/search_news_example_llm_oai.js
@@ -0,0 +1,20 @@
+import OpenAI from "openai";
+
+const USER_ID = "you@example.com";
+const PROMPT = "Search for news about 'Apple's new iPhone'.";
+const TOOL_NAME = "Search.SearchNews";
+
+const client = new OpenAI({
+ baseURL: "https://api.arcade.dev",
+ apiKey: process.env.ARCADE_API_KEY,
+});
+
+const response = await client.chat.completions.create({
+ messages: [{ role: "user", content: PROMPT }],
+ model: "gpt-4o-mini",
+ user: USER_ID,
+ tools: [TOOL_NAME],
+ tool_choice: "generate",
+});
+
+console.log(response.choices[0].message.content);
diff --git a/public/examples/integrations/toolkits/search/google_news/search_news_example_llm_oai.py b/public/examples/integrations/toolkits/search/google_news/search_news_example_llm_oai.py
new file mode 100644
index 000000000..bfe82ef10
--- /dev/null
+++ b/public/examples/integrations/toolkits/search/google_news/search_news_example_llm_oai.py
@@ -0,0 +1,21 @@
+import os
+from openai import OpenAI
+
+USER_ID = "you@example.com"
+PROMPT = "Search for news about 'Apple's new iPhone'."
+TOOL_NAME = "Search.SearchNews"
+
+client = OpenAI(
+ base_url="https://api.arcade.dev", api_key=os.environ.get("ARCADE_API_KEY")
+)
+
+response = client.chat.completions.create(
+ messages=[
+ {"role": "user", "content": PROMPT},
+ ],
+ model="gpt-4o-mini",
+ user=USER_ID,
+ tools=[TOOL_NAME],
+ tool_choice="generate",
+)
+print(response.choices[0].message.content)
diff --git a/public/examples/integrations/toolkits/search/search_google_example_call_tool.js b/public/examples/integrations/toolkits/search/google_search/search_google_example_call_tool.js
similarity index 100%
rename from public/examples/integrations/toolkits/search/search_google_example_call_tool.js
rename to public/examples/integrations/toolkits/search/google_search/search_google_example_call_tool.js
diff --git a/public/examples/integrations/toolkits/search/search_google_example_call_tool.py b/public/examples/integrations/toolkits/search/google_search/search_google_example_call_tool.py
similarity index 100%
rename from public/examples/integrations/toolkits/search/search_google_example_call_tool.py
rename to public/examples/integrations/toolkits/search/google_search/search_google_example_call_tool.py
diff --git a/public/examples/integrations/toolkits/search/search_google_example_llm_oai.js b/public/examples/integrations/toolkits/search/google_search/search_google_example_llm_oai.js
similarity index 100%
rename from public/examples/integrations/toolkits/search/search_google_example_llm_oai.js
rename to public/examples/integrations/toolkits/search/google_search/search_google_example_llm_oai.js
diff --git a/public/examples/integrations/toolkits/search/search_google_example_llm_oai.py b/public/examples/integrations/toolkits/search/google_search/search_google_example_llm_oai.py
similarity index 100%
rename from public/examples/integrations/toolkits/search/search_google_example_llm_oai.py
rename to public/examples/integrations/toolkits/search/google_search/search_google_example_llm_oai.py
diff --git a/public/images/icons/google_finance.png b/public/images/icons/google_finance.png
new file mode 100644
index 000000000..040a9f80f
Binary files /dev/null and b/public/images/icons/google_finance.png differ
diff --git a/public/images/icons/google_flights.png b/public/images/icons/google_flights.png
new file mode 100644
index 000000000..719d21f74
Binary files /dev/null and b/public/images/icons/google_flights.png differ
diff --git a/public/images/icons/google_hotels.png b/public/images/icons/google_hotels.png
new file mode 100644
index 000000000..6ab88747b
Binary files /dev/null and b/public/images/icons/google_hotels.png differ
diff --git a/public/images/icons/google_jobs.png b/public/images/icons/google_jobs.png
new file mode 100644
index 000000000..11210b6e3
Binary files /dev/null and b/public/images/icons/google_jobs.png differ
diff --git a/public/images/icons/google_maps.png b/public/images/icons/google_maps.png
new file mode 100644
index 000000000..7eb135e7f
Binary files /dev/null and b/public/images/icons/google_maps.png differ
diff --git a/public/images/icons/google_news.png b/public/images/icons/google_news.png
new file mode 100644
index 000000000..727930cdf
Binary files /dev/null and b/public/images/icons/google_news.png differ
diff --git a/public/images/icons/google_search.png b/public/images/icons/google_search.png
new file mode 100644
index 000000000..1a07ca476
Binary files /dev/null and b/public/images/icons/google_search.png differ
diff --git a/public/images/icons/serpapi.png b/public/images/icons/serpapi.png
deleted file mode 100644
index 96536112c..000000000
Binary files a/public/images/icons/serpapi.png and /dev/null differ
diff --git a/src/components/custom/Toolkits/toolkits-config.ts b/src/components/custom/Toolkits/toolkits-config.ts
index 87d4fe292..991c22476 100644
--- a/src/components/custom/Toolkits/toolkits-config.ts
+++ b/src/components/custom/Toolkits/toolkits-config.ts
@@ -19,6 +19,7 @@ export const categories: Category[] = [
{ id: "social", name: "Social & Communication" },
{ id: "development", name: "Developer Tools" },
{ id: "entertainment", name: "Entertainment" },
+ { id: "search", name: "Search" },
];
export const tools: Tool[] = [
@@ -118,11 +119,59 @@ export const tools: Tool[] = [
type: "arcade",
},
{
- name: "Search",
- image: "serpapi",
- summary: "Perform web searches and retrieve relevant information",
- link: "/toolkits/development/search",
- category: "development",
+ name: "Google Finance",
+ image: "google_finance",
+ summary: "Get stock data from Google Finance",
+ link: "/toolkits/search/google_finance",
+ category: "search",
+ type: "arcade",
+ },
+ {
+ name: "Google Flights",
+ image: "google_flights",
+ summary: "Search for flights",
+ link: "/toolkits/search/google_flights",
+ category: "search",
+ type: "arcade",
+ },
+ {
+ name: "Google Hotels",
+ image: "google_hotels",
+ summary: "Search for hotels",
+ link: "/toolkits/search/google_hotels",
+ category: "search",
+ type: "arcade",
+ },
+ {
+ name: "Google Search",
+ image: "google_search",
+ summary: "Perform Google searches and retrieve relevant information",
+ link: "/toolkits/search/google_search",
+ category: "search",
+ type: "arcade",
+ },
+ {
+ name: "Google Maps",
+ image: "google_maps",
+ summary: "Get directions between two locations with Google Maps",
+ link: "/toolkits/search/google_maps",
+ category: "search",
+ type: "arcade",
+ },
+ {
+ name: "Google News",
+ image: "google_news",
+ summary: "Search for news articles with Google News",
+ link: "/toolkits/search/google_news",
+ category: "search",
+ type: "arcade",
+ },
+ {
+ name: "Google Jobs",
+ image: "google_jobs",
+ summary: "Search for job openings with Google Jobs.",
+ link: "/toolkits/search/google_jobs",
+ category: "search",
type: "arcade",
},
{