✅
Link to the plugin page:
Demo to preview the plugin:
✅
Introduction
The Web Search Plugin enables you to add intelligent web, image, video, news, places, and shopping search capabilities directly into your Bubble app using the Serper.dev search API (based on Google Search results).
This plugin is ideal for:
- Creating your own search engine.
- Building knowledge graph-powered experiences.
- Integrating image, video, and product search functionality into your app.
Key Features
- Web search with knowledge graph support
- Image search
- Video search
- News search
- Shopping/product search
- Places and locations search
All results are returned in structured JSON format, ready to be displayed in repeating groups or used in workflows.
👛 Please support our efforts to keep this plugin free—your donations help us invest the time and resources needed to continue maintaining and improving it for everyone's benefit: https://zeroqo.de/support.
How to setup
Step 1. Sign Up for a Serper API Key
This plugin uses the Serper.dev API, which provides Google Search results.
- Visit https://serper.dev/
- Click on “Sign up” to create a new account, or “Log in” if you already have one.
- Navigate to the API Key section in your Dashboard and copy your API key.
Step 2. Install the Plugin
- Go to the Plugin Tab
- Open your Bubble Editor.
- Navigate to the Plugins tab on the left panel.
- Add Plugins
- Once in the Plugins tab, click the Add Plugins button.
- Search for the Plugin
- Use the search bar to type Web Search.
- Locate the plugin in the search results.
- Install/Buy
- If the plugin is free, click Install to add it to your application.
- For a paid plugin, click Buy and follow the purchase instructions
Step 3. Configure the API Key
- After installing, scroll to the plugin in your plugin list
- Paste your Serper.dev API Key into the API Key field
Step 4. Use the Plugin Actions
Once the plugin is installed and your Serper.dev API key is configured, you can use plugin actions in your workflows or bind their outputs directly to UI components like repeating groups.
Let’s walk through an example: Creating a News Web Search Feature.
- Go to your Bubble editor → Design tab.
- Drag an Input element onto your page and name it
Input Search
.
- Add a Button below it labeled “Search”.
Add a Repeating Group to Display Results
- Drag a Repeating Group onto the page.
- Set Type of content to
News Search body new (Web Searching)
.
- For Data source, Get Data from an external API
- Set the API provider to
Web Searching - News Search
- Set the Query to
Input Search's value
.
This triggers the plugin to fetch search results based on the user’s input.
- Inside the repeating group, add a Text element and set it to show current cell’s text.
Step 5. Create a Workflow for the Search Button
To trigger a news search using the plugin:
- Go to the Workflow Tab
- In your Bubble editor, click on the Workflow tab.
- Add a New Event
- Click "+ Click here to add an event"
- Choose "Elements → When Button Search is clicked"
- Add an Action to Display Results
- Click "Click here to add an action"
- Go to Element Actions → Display list
- Configure the Display List Action
- Element: Select your Repeating Group (e.g.,
RepeatingGroup News Results
) - Data source: Select "Get data from an external API"
- API provider:
Web Searching - News Search
- Query: Set this to
Input Search's value
(or whatever your search input is called)
This will display the plugin results in your repeating group dynamically based on what the user types into the search field.
Plugin Data Calls
Web Search
Search the web using a custom query.
Name | Description | Type |
Query | The search term (e.g. "ChatGPT use cases") | Text |
Return Values: Knowledge graph + organic results + related searches.
Return Type: JSON
json{ "body searchParameters q": "text", "body searchParameters type": "text", "body searchParameters engine": "text", "body knowledgeGraph title": "text", "body knowledgeGraph type": "text", "body knowledgeGraph website": "text", "body knowledgeGraph imageUrl": "text", "body knowledgeGraph description": "text", "body knowledgeGraph descriptionSource": "text", "body knowledgeGraph descriptionLink": "text", "body knowledgeGraph attributes Customer service": "text", "body knowledgeGraph attributes Founders": "text", "body knowledgeGraph attributes Products": "text", "body knowledgeGraph attributes Headquarters": "text", "body knowledgeGraph attributes CEO": "text", "body knowledgeGraph attributes Founded": "text", "body knowledgeGraph attributes COO": "text", "body organic": { "title": "text", "link": "text", "snippet": "text", "sitelinks": { "title": "text", "link": "text" }, "position": "number" }, "body peopleAlsoAsk": { "question": "text", "snippet": "text", "title": "text", "link": "text" }, "body relatedSearches": { "query": "text" }, "error status_code": "number", "error status_message": "text", "error body": "text", "returned_an_error": "yes/no" }
Images Search
Search for relevant images based on a query.
Name | Description | Type |
Query | Search term (e.g. "sunset wallpapers") | Text |
Return Values: Title, image URL, source, thumbnail, dimensions.
Return Type: JSON
json{ "body searchParameters q": "text", "body searchParameters type": "text", "body searchParameters engine": "text", "body images": { "title": "text", "imageUrl": "text", "imageWidth": "number", "imageHeight": "number", "thumbnailUrl": "text", "thumbnailWidth": "number", "thumbnailHeight": "number", "source": "text", "domain": "text", "link": "text", "googleUrl": "text", "position": "number" }, "error status_code": "number", "error status_message": "text", "error body": "text", "returned_an_error": "yes/no" }
Videos Search
Retrieve video content related to your query.
Name | Description | Type |
Query | Search term (e.g. "how to learn Bubble.io") | Text |
Return Values: Title, link, snippet, thumbnail, source, duration.
Return Type: JSON
json{ "body searchParameters q": "text", "body searchParameters type": "text", "body searchParameters engine": "text", "body videos": { "title": "text", "link": "text", "snippet": "text", "imageUrl": "text", "duration": "text", "source": "text", "date": "undefined", "position": "number" }, "error status_code": "number", "error status_message": "text", "error body": "text", "returned_an_error": "yes/no" }
Places Search
Search for physical locations (e.g. restaurants, hotels, landmarks).
Name | Description | Type |
Query | Search term (e.g. "cafes near Lagos") | Text |
Return Values: Name, address, rating, coordinates, website, phone number.
Return Type: JSON
json{ "body searchParameters q": "text", "body searchParameters type": "text", "body searchParameters engine": "text", "body places": { "position": "number", "title": "text", "address": "text", "latitude": "number", "longitude": "number", "rating": "number", "ratingCount": "number", "priceLevel": "text", "category": "text", "phoneNumber": "text", "website": "text", "cid": "text", "placeId": "text" }, "error status_code": "number", "error status_message": "text", "error body": "text", "returned_an_error": "yes/no" }
News Search
Pull recent news articles based on a query.
Name | Description | Type |
Query | Search term (e.g. "AI regulation 2024") | Text |
Return Values: Title, link, snippet, date, image, source.
Return Type: JSON
json{ "body searchParameters q": "text", "body searchParameters type": "text", "body searchParameters engine": "text", "body news": { "title": "text", "link": "text", "snippet": "text", "date": "undefined", "source": "text", "imageUrl": "text", "position": "number" }, "error status_code": "number", "error status_message": "text", "error body": "text", "returned_an_error": "yes/no" }
Shopping Search
Search for products available online.
Name | Description | Type |
Query | Product name or keyword (e.g. "wireless earbuds") | Text |
Return Values: Title, price, source, rating, offers, link.
Return Type: JSON
json{ "body searchParameters q": "text", "body searchParameters type": "text", "body searchParameters engine": "text", "body shopping": { "title": "text", "source": "text", "link": "text", "price": "text", "delivery": "text", "imageUrl": "text", "rating": "number", "ratingCount": "number", "offers": "text", "productId": "text", "position": "number" }, "error status_code": "number", "error status_message": "text", "error body": "text", "returned_an_error": "yes/no" }
Changelogs
Update 17.02.25 - Version 1.6.0
- Acquired by Zeroqode.
Update 23.08.24 - Version 1.5.0
- Updated Description.
Update 13.02.24 - Version 1.4.1
- Added Details - New Search Capabilites Info.
Update 12.02.24 - Version 1.4.0
- Updated API.
Update 12.10.23 - Version 1.3.3
- Updated Description.
Update 14.09.23 - Version 1.3.2
- Minor Fix.
Update 08.09.23 - Version 1.3.1
- Added Documentation..
Update 03.08.23 - Version 1.3.0
- Deprecated (API no longer available).
Update 03.01.23 - Version 1.2.1
- New Update.
Update 12.02.19 - Version 1.2.0
- description changes.
Update 11.01.19 - Version 1.1.0
- Added a demo Application: https://websearchplugintest.bubbleapps.io/.
Update 06.01.19 - Version 1.0.0
- v1.