Full-featured Ruby client for SearchAPI.io
Access 49 search engines from a single, consistent interface.
Google · Bing · Baidu · Yandex · DuckDuckGo · YouTube · Amazon · Walmart · eBay
Airbnb · TripAdvisor · Social Media · Ad Libraries · and much more
Table of Contents
- Installation
- Quick Start
- Configuration
- Supported Engines
-
All 49 engines... - Google Search
- Google Rank Tracking
- Google Maps
- Google News
- Google Scholar
- Google Shopping
- Google Flights
- Google Hotels
- Google Images
- Google Videos
- Google Trends
- Google Jobs
- Google Events
- Google Finance
- Google Autocomplete
- Google Local
- Google Forums
- Google Shorts
- Google Patents
- Google Lens
- Google AI Mode
- Google AI Overview
- Google About This Domain
- Google Ads Transparency Center
- Google Play Store
- YouTube
- Bing
- Bing Images
- Bing Videos
- Baidu
- Yandex
- Yandex Reverse Image
- DuckDuckGo
- Yahoo
- Naver
- Amazon
- Walmart
- eBay
- Shein
- Airbnb
- TripAdvisor
- Apple App Store
- Instagram Profile
- TikTok Profile
- Facebook Business Page
- LinkedIn Ad Library
- Reddit Ad Library
- Meta Ad Library
- TikTok Ads Library
Installation
Add to your Gemfile:
gem "searchapi-ruby"
Then run:
bundle install
Or install directly:
gem install searchapi-ruby
Quick Start
require "searchapi"
SearchApi.configure do |config|
config.api_key = "your_api_key"
end
# Google search
response = SearchApi.google.search("ruby programming language")
puts response.data["organic_results"]
# YouTube search
response = SearchApi.youtube.search("ruby tutorial")
puts response.data["videos"]
# Amazon product search
response = SearchApi.amazon_search.search("wireless headphones")
puts response.data["organic_results"]
# Instagram profile
response = SearchApi.instagram_profile.search(username: "instagram")
puts response.data["profile"]
Configuration
SearchApi.configure do |config|
config.api_key = ENV["SEARCHAPI_API_KEY"] # default: reads from env
config.base_url = "https://www.searchapi.io/api/v1" # default
config.timeout = 30 # seconds, default
config.retries = 2 # automatic retries on 429/5xx, default
config.logger = Logger.new($stdout) # optional, for debugging
end
Supported Engines
View all 49 supported engines
| Category | Engine | Accessor | |----------|--------|----------| | **Google** | Google Search | `SearchApi.google` | | | Google Rank Tracking | `SearchApi.google_rank_tracking` | | | Google Maps | `SearchApi.google_maps` | | | Google Local | `SearchApi.google_local` | | | Google News | `SearchApi.google_news` | | | Google Scholar | `SearchApi.google_scholar` | | | Google Shopping | `SearchApi.google_shopping` | | | Google Flights | `SearchApi.google_flights` | | | Google Hotels | `SearchApi.google_hotels` | | | Google Images | `SearchApi.google_images` | | | Google Videos | `SearchApi.google_videos` | | | Google Shorts | `SearchApi.google_shorts` | | | Google Trends | `SearchApi.google_trends` | | | Google Jobs | `SearchApi.google_jobs` | | | Google Events | `SearchApi.google_events` | | | Google Finance | `SearchApi.google_finance` | | | Google Autocomplete | `SearchApi.google_autocomplete` | | | Google Forums | `SearchApi.google_forums` | | | Google Patents | `SearchApi.google_patents` | | | Google Lens | `SearchApi.google_lens` | | | Google AI Mode | `SearchApi.google_ai_mode` | | | Google AI Overview | `SearchApi.google_ai_overview` | | | Google About This Domain | `SearchApi.google_about_this_domain` | | | Google Ads Transparency | `SearchApi.google_ads_transparency_center` | | | Google Play Store | `SearchApi.google_play_store` | | **Other Search Engines** | Bing | `SearchApi.bing` | | | Bing Images | `SearchApi.bing_images` | | | Bing Videos | `SearchApi.bing_videos` | | | Baidu | `SearchApi.baidu` | | | Yandex | `SearchApi.yandex` | | | Yandex Reverse Image | `SearchApi.yandex_reverse_image` | | | DuckDuckGo | `SearchApi.duckduckgo` | | | Yahoo | `SearchApi.yahoo` | | | Naver | `SearchApi.naver` | | | YouTube | `SearchApi.youtube` | | **E-commerce** | Amazon | `SearchApi.amazon_search` | | | Walmart | `SearchApi.walmart_search` | | | eBay | `SearchApi.ebay_search` | | | Shein | `SearchApi.shein_search` | | **Travel** | Airbnb | `SearchApi.airbnb` | | | TripAdvisor | `SearchApi.tripadvisor` | | **App Stores** | Apple App Store | `SearchApi.apple_app_store` | | **Social Media** | Instagram Profile | `SearchApi.instagram_profile` | | | TikTok Profile | `SearchApi.tiktok_profile` | | | Facebook Business Page | `SearchApi.facebook_business_page` | | **Ad Libraries** | LinkedIn Ad Library | `SearchApi.linkedin_ad_library` | | | Reddit Ad Library | `SearchApi.reddit_ad_library` | | | Meta Ad Library | `SearchApi.meta_ad_library` | | | TikTok Ads Library | `SearchApi.tiktok_ads_library` |Usage
Google Search
```ruby # Basic search response = SearchApi.google.search("ruby programming") # With parameters response = SearchApi.google.search("ruby programming", gl: "us", hl: "en", num: 10, page: 1 ) ```Google Rank Tracking
```ruby # Track rankings (up to 100 results per request) response = SearchApi.google_rank_tracking.search("best crm software", num: 100) # With location targeting response = SearchApi.google_rank_tracking.search("plumber near me", num: 50, location: "New York, NY" ) ```Google Maps
```ruby # Search for places response = SearchApi.google_maps.search("restaurants in Tokyo") # With GPS coordinates response = SearchApi.google_maps.search("coffee", ll: "@35.6762,139.6503,15z") # Get place details response = SearchApi.google_maps.place(data_id: "0x60188b857...") # Get directions response = SearchApi.google_maps.directions( start: "Tokyo Station", destination: "Shibuya Station" ) ```Google News
```ruby response = SearchApi.google_news.search("artificial intelligence") # Filter by time period response = SearchApi.google_news.search("tech startups", time_period: "last_week", gl: "us" ) ```Google Scholar
```ruby # Search papers response = SearchApi.google_scholar.search("machine learning") # Filter by year response = SearchApi.google_scholar.search("deep learning", as_ylo: 2023, as_yhi: 2026 ) # Find citing articles response = SearchApi.google_scholar.cite("article_id_here") ```Google Shopping
```ruby response = SearchApi.google_shopping.search("laptop") # With filters response = SearchApi.google_shopping.search("headphones", sort_by: "price_low_to_high", price_min: 50, price_max: 200, condition: "new" ) ```Google Flights
```ruby # Round trip response = SearchApi.google_flights.search( from: "JFK", to: "LAX", outbound_date: "2026-06-15", return_date: "2026-06-22" ) # One way response = SearchApi.google_flights.search( from: "SFO", to: "ORD", outbound_date: "2026-07-01", flight_type: "one_way", travel_class: "business" ) ```Google Hotels
```ruby response = SearchApi.google_hotels.search("hotels in Paris", check_in: "2026-06-15", check_out: "2026-06-18" ) ```Google Images
```ruby response = SearchApi.google_images.search("sunset over ocean") # With filters response = SearchApi.google_images.search("logo design", color: "red", size: "large", image_type: "clipart" ) ```Google Videos
```ruby response = SearchApi.google_videos.search("ruby tutorial") # With filters response = SearchApi.google_videos.search("cooking pasta", duration: "medium", time_period: "last_month" ) ```Google Trends
```ruby # Interest over time response = SearchApi.google_trends.interest_over_time("ruby, python, javascript") # Interest by region response = SearchApi.google_trends.interest_by_region("react", geo: "US") # Related queries response = SearchApi.google_trends.related_queries("machine learning") # Related topics response = SearchApi.google_trends.related_topics("artificial intelligence") # Direct search with data_type response = SearchApi.google_trends.search("web development", data_type: "TIMESERIES", time: "today 12-m" ) ```Google Jobs
```ruby response = SearchApi.google_jobs.search("software engineer") # With filters response = SearchApi.google_jobs.search("data scientist", location: "San Francisco, CA", gl: "us" ) ```Google Events
```ruby response = SearchApi.google_events.search("concerts in Austin") # Filter by date response = SearchApi.google_events.search("tech conferences", chips: "date:next_week" ) ```Google Finance
```ruby # Stock quote response = SearchApi.google_finance.search("NVDA:NASDAQ") # With time window response = SearchApi.google_finance.search("AAPL:NASDAQ", window: "1Y") # Crypto response = SearchApi.google_finance.search("BTC-USD") ```Google Autocomplete
```ruby response = SearchApi.google_autocomplete.search("how to learn") # With client specification response = SearchApi.google_autocomplete.search("best restaurants", client: "chrome", gl: "us" ) ```Google Local
```ruby response = SearchApi.google_local.search("pizza delivery", location: "Chicago, IL" ) ```Google Forums
```ruby response = SearchApi.google_forums.search("best ruby gems 2026", time_period: "last_year" ) ```Google Shorts
```ruby response = SearchApi.google_shorts.search("funny cats") ```Google Patents
```ruby response = SearchApi.google_patents.search("solar panel efficiency", patent_status: "GRANT", num: 20 ) ```Google Lens
```ruby response = SearchApi.google_lens.search( url: "https://example.com/image.jpg", search_type: "products" ) ```Google AI Mode
```ruby response = SearchApi.google_ai_mode.search("explain quantum computing simply") ```Google AI Overview
```ruby # Requires a page_token from a prior Google Search response response = SearchApi.google_ai_overview.search(page_token: "token_from_google_search") ```Google About This Domain
```ruby response = SearchApi.google_about_this_domain.search(domain: "github.com") ```Google Ads Transparency Center
```ruby # Search by advertiser response = SearchApi.google_ads_transparency_center.by_advertiser("AR01234567890") # Search by domain response = SearchApi.google_ads_transparency_center.by_domain("example.com", region: "US" ) # Generic search response = SearchApi.google_ads_transparency_center.search( advertiser_id: "AR01234567890", region: "US" ) ```Google Play Store
```ruby # Search apps response = SearchApi.google_play_store.apps("calculator") # Browse games response = SearchApi.google_play_store.games # Search movies response = SearchApi.google_play_store.movies("action") # Search books response = SearchApi.google_play_store.books("ruby programming") # Direct search with store parameter response = SearchApi.google_play_store.search(store: "apps", q: "fitness", gl: "us") ```YouTube
```ruby response = SearchApi.youtube.search("ruby on rails tutorial") # With parameters response = SearchApi.youtube.search("cooking", gl: "us", hl: "en") ```Bing
```ruby response = SearchApi.bing.search("artificial intelligence") # With parameters response = SearchApi.bing.search("web development", num: 30, market_code: "en-US" ) ```Bing Images
```ruby response = SearchApi.bing_images.search("mountain landscape", size: "large") ```Bing Videos
```ruby response = SearchApi.bing_videos.search("cooking tutorial", duration: "short") ```Baidu
```ruby response = SearchApi.baidu.search("人工智能", num: 20) ```Yandex
```ruby response = SearchApi.yandex.search("programming tutorials", lang: "en") ```Yandex Reverse Image
```ruby response = SearchApi.yandex_reverse_image.search( url: "https://example.com/photo.jpg" ) ```DuckDuckGo
```ruby response = SearchApi.duckduckgo.search("privacy tools", safe: "moderate") ```Yahoo
```ruby response = SearchApi.yahoo.search("weather forecast", yahoo_domain: "search.yahoo.com" ) ```Naver
```ruby response = SearchApi.naver.search("한국 뉴스", page: 2) ```Amazon
```ruby response = SearchApi.amazon_search.search("wireless headphones") # With filters response = SearchApi.amazon_search.search("organic coffee", amazon_domain: "amazon.co.uk", sort_by: "price_asc", page: 2 ) ```Walmart
```ruby response = SearchApi.walmart_search.search("organic coffee", sort_by: "price_low") ```eBay
```ruby # Search with query response = SearchApi.ebay_search.search("vintage watch") # Browse by category response = SearchApi.ebay_search.search(category_id: "123") # With filters response = SearchApi.ebay_search.search("laptop", condition: "new", price_min: 500, price_max: 1500 ) ```Shein
```ruby response = SearchApi.shein_search.search("summer dress", sort_by: "price_asc", currency: "USD" ) ```Airbnb
```ruby response = SearchApi.airbnb.search("Tulum", check_in: "2026-06-15", check_out: "2026-06-22", adults: 2, price_max: 200 ) ```TripAdvisor
```ruby response = SearchApi.tripadvisor.search("best restaurants in Rome", category: "restaurants" ) ```Apple App Store
```ruby response = SearchApi.apple_app_store.search(term: "photo editor", country: "us", num: 50 ) ```Instagram Profile
```ruby response = SearchApi.instagram_profile.search(username: "natgeo") profile = response.data["profile"] posts = response.data["posts"] ```TikTok Profile
```ruby response = SearchApi.tiktok_profile.search(username: "tiktok") profile = response.data["profile"] ```Facebook Business Page
```ruby # By username response = SearchApi.facebook_business_page.by_username("cocacola") # By page ID response = SearchApi.facebook_business_page.by_page_id("123456789") # Generic search response = SearchApi.facebook_business_page.search(username: "nasa") ```LinkedIn Ad Library
```ruby response = SearchApi.linkedin_ad_library.search( advertiser: "Google", country: "US" ) ```Reddit Ad Library
```ruby response = SearchApi.reddit_ad_library.search( q: "gaming", industry: "GAMING", budget_category: "HIGH" ) ```Meta Ad Library
```ruby response = SearchApi.meta_ad_library.search( q: "sneakers", active_status: "active", platforms: "instagram" ) ```TikTok Ads Library
```ruby response = SearchApi.tiktok_ads_library.search( q: "fashion", country: "US", sort_by: "last_shown_date_newest_to_oldest" ) ```Response Object
Every API call returns a SearchApi::Response:
response = SearchApi.google.search("ruby")
response.success? # => true
response.status # => 200
response.data # => parsed JSON hash (full response)
response.results # => same as data when it's a Hash
response.headers # => response headers
response.credits_remaining # => remaining API credits (integer)
Error Handling
All errors inherit from SearchApi::Error:
begin
SearchApi.google.search("ruby")
rescue SearchApi::AuthenticationError => e
# Invalid or missing API key (401)
rescue SearchApi::RateLimitError => e
# Too many requests (429)
rescue SearchApi::NotFoundError => e
# Resource not found (404)
rescue SearchApi::TimeoutError => e
# Request timed out or connection failed
rescue SearchApi::ServerError => e
# Server-side error (5xx)
rescue SearchApi::Error => e
# Catch-all for any SearchApi error
end
Automatic retries are built in for 429, 500, 502, and 503 status codes (configurable via config.retries).
Advanced Usage
Custom Client Instance
You can create a standalone client instead of using the global module:
config = SearchApi::Configuration.new
config.api_key = "different_api_key"
config.timeout = 60
client = SearchApi::Client.new(config)
google = SearchApi::Resources::Google.new(client)
response = google.search("ruby programming")
Common Parameters
Most Google engines support these shared parameters:
| Parameter | Description | Example |
|---|---|---|
gl |
Country code (ISO 3166-1 alpha-2) | "us", "gb", "jp" |
hl |
Language code | "en", "es", "ja" |
location |
Geo-targeting location | "New York, NY" |
device |
Device type | "desktop", "mobile", "tablet" |
page |
Pagination | 1, 2, 3 |
safe |
SafeSearch | "active", "off" |
num |
Results per page | 10, 20, 100 |
See the SearchAPI documentation for the full parameter reference of each engine.
Zero Retention (Enterprise)
Disable data logging for compliance scenarios:
response = SearchApi.google.search("sensitive query", zero_retention: true)
Contributing
Bug reports and pull requests are welcome! See CONTRIBUTING.md for guidelines.
License
Released under the MIT License.