<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Terry Tan</title>
    <description>The latest articles on DEV Community by Terry Tan (@terrytanys).</description>
    <link>https://dev.to/terrytanys</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F639874%2F080f3e9a-71f7-4bff-be84-dea31bf6432c.jpeg</url>
      <title>DEV Community: Terry Tan</title>
      <link>https://dev.to/terrytanys</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/terrytanys"/>
    <language>en</language>
    <item>
      <title>SerpApi's Google Maps Scraper</title>
      <dc:creator>Terry Tan</dc:creator>
      <pubDate>Thu, 14 Nov 2024 06:09:34 +0000</pubDate>
      <link>https://dev.to/terrytanys/serpapis-google-maps-scraper-4cl0</link>
      <guid>https://dev.to/terrytanys/serpapis-google-maps-scraper-4cl0</guid>
      <description>&lt;p&gt;In &lt;a href="http://serpapi.com/" rel="noopener noreferrer"&gt;SerpApi&lt;/a&gt;, we make web scraping on search engines easy and fast. &lt;a href="https://serpapi.com/google-maps-api" rel="noopener noreferrer"&gt;Google Maps Scraper API&lt;/a&gt; is one of our customers' favourite to scrape local business, it provides comprehensive google maps data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1pu1ja77jg7tbr36asdk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1pu1ja77jg7tbr36asdk.png" alt="SerpApi's Google Maps Playground" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It only takes one API call to retrieve all the data available in Google Maps. Above is an example from our playground (&lt;a href="https://serpapi.com/playground?engine=google_maps&amp;amp;q=Coffee&amp;amp;ll=%4040.7455096%2C-74.0083012%2C14z&amp;amp;hl=en&amp;amp;type=search" rel="noopener noreferrer"&gt;Try it out&lt;/a&gt;). Upon sign up, you will receive 100 free searches every month.&lt;/p&gt;

&lt;h2&gt;
  
  
  What type of data can I extract from the Google Maps API?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Title - Name of the business entity&lt;/li&gt;
&lt;li&gt;GPS Coordinates - An accurate GPS coordinates of the business entity&lt;/li&gt;
&lt;li&gt;Rating - Rating of the business entity&lt;/li&gt;
&lt;li&gt;Reviews - Total number of reviews of the business entity&lt;/li&gt;
&lt;li&gt;Price - For some business (e.g. restaurant), price indicate the estimated cost of a meal&lt;/li&gt;
&lt;li&gt;Type - The business entity type&lt;/li&gt;
&lt;li&gt;Address - Human readable full address of the business entity&lt;/li&gt;
&lt;li&gt;Operating Hours - The opening and closing hours of the business from Monday to Sunday&lt;/li&gt;
&lt;li&gt;Phone - Phone number of the business entity&lt;/li&gt;
&lt;li&gt;Website - Website URL of the business entity&lt;/li&gt;
&lt;li&gt;Description - A short summary about the business entity&lt;/li&gt;
&lt;li&gt;Service Options - Indicate of the business entity offers Dine In, Takeout, Delivery, and many others&lt;/li&gt;
&lt;li&gt;Order Online - Order URL of the business entity&lt;/li&gt;
&lt;li&gt;Menu - Menu URL of the business entity&lt;/li&gt;
&lt;li&gt;Thumbnail - Image of the business entity&lt;/li&gt;
&lt;li&gt;User Review - Featured review at the front page&lt;/li&gt;
&lt;li&gt;Amenities - Amenities of the business entity&lt;/li&gt;
&lt;li&gt;Photos - Get all the user posted photos with pagination. Refer to &lt;a href="https://serpapi.com/google-maps-photos-api" rel="noopener noreferrer"&gt;Google Maps Photos API&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Reviews - Get all the user reviews with pagination. Refer to &lt;a href="https://serpapi.com/google-maps-reviews-api" rel="noopener noreferrer"&gt;Google Maps Reviews API&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Extensions - Highlights for the business entity (e.g. Fast service, Great coffee, Popular for Breakfast, Wheelchair accessible entrance and many more)&lt;/li&gt;
&lt;li&gt;People Also Search For - Popular search of a similar business entity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We also provide a few more Google Maps Scraper APIs, which are &lt;a href="https://serpapi.com/google-maps-autocomplete-api" rel="noopener noreferrer"&gt;Google Autocomplete API&lt;/a&gt;, &lt;a href="https://serpapi.com/google-maps-contributor-reviews-api" rel="noopener noreferrer"&gt;Google Contributor Reviews API&lt;/a&gt; and &lt;a href="https://serpapi.com/google-maps-directions-api" rel="noopener noreferrer"&gt;Google Directions API&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to scrape Google Maps?
&lt;/h2&gt;

&lt;p&gt;Here is a step-by-step tutorial on using SerpApi’s Google Maps API to retrieve Google Maps data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Go to &lt;a href="https://serpapi.com/playground?engine=google_maps" rel="noopener noreferrer"&gt;SerpApi's Google Maps Playground&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
The playground is the most intuitive tool to get started. You can feel no different from searching in Google Maps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fdhphun2zlqxeo3ofpg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fdhphun2zlqxeo3ofpg.png" alt="SerpApi's Google Maps Playground" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The link should direct you to Google Maps. Please verify that it is correctly set to Google Maps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdg5p2l30w5zi7nccfynz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdg5p2l30w5zi7nccfynz.png" alt="SerpApi's Playground engine selection" width="800" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Enter the search query and GPS Coordinates to scrape&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faprg8dqcvhtamc33rzw1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faprg8dqcvhtamc33rzw1.png" alt="SerpApi's Playground inputs" width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Search query can be anything you will usually search in Google Maps. GPS Coordinates is optional, however, we recommend to always search with a GPS Coordinates for higher accurate results. You can find GPS Coordinates from a place using &lt;a href="https://www.gps-coordinates.net/" rel="noopener noreferrer"&gt;www.gps-coordinates.net&lt;/a&gt; or any tool you can find online.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Start the search&lt;/strong&gt;&lt;br&gt;
The search would take averagely 2.5s (or less than 1 second if you are on Ludicrous Speed plan). The results are presented in JSON format with a preview at the left side. Feel free to test more variations of the search query to see if the data matches your needs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw1luivuq69wmudxyn5zx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw1luivuq69wmudxyn5zx.png" alt="SerpApi's Playground results" width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the top right corner - Export to Code, you can copy the JSON URL or follow the code to integrate with your workflow. You do have to register a free SerpApi account to use the API. The HTML can be useful when you would like to inspect the data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1bcivi58ms5znhccgom7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1bcivi58ms5znhccgom7.png" alt="SerpApi's Playground integration" width="800" height="761"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Example in Python
&lt;/h2&gt;

&lt;p&gt;If you would like to straight dive into the code, this should be helpful to get you started on Google Maps data extraction. We also provide many others programming languages (e.g. Javascript, Java, etc), checkout our &lt;a href="https://serpapi.com/integrations" rel="noopener noreferrer"&gt;integration guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;First, you need to install the SerpApi client library (&lt;a href="https://github.com/serpapi/google-search-results-python?ref=serpapi.com" rel="noopener noreferrer"&gt;Github&lt;/a&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install google-search-results
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set up the &lt;a href="https://serpapi.com/manage-api-key?ref=serpapi.com" rel="noopener noreferrer"&gt;SerpApi credentials&lt;/a&gt; and search.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from serpapi import GoogleSearch
import os, json

params = {
    'api_key': 'YOUR_API_KEY',         # your serpapi api
    'engine': 'google_maps',           # SerpApi search engine  
    'q': 'Coffee',                     # query
    'location': "New York, NY, USA"    # location
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To retrieve the Google Maps local results for a given search query, you can use the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;results = GoogleSearch(params).get_dict()['local_results']
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can store Google Maps local results JSON data in databases or export them to a CSV file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import csv

header = ['position', 'title', 'place_id', 'address', 'rating', 'reviews', 'price', 'phone']

with open('google_maps_results.csv', 'w', encoding='UTF8', newline='') as f:
    writer = csv.writer(f)

    writer.writerow(header)

    for item in results:
        print(item)
        writer.writerow([item.get('position'), item.get('title'), item.get('place_id'), item.get('address'), item.get('rating'), item.get('review'), item.get('price'), item.get('phone')])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  FAQs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is it legal to extract data from Google Maps?&lt;/strong&gt;&lt;br&gt;
Scraping public available data is generally safe provided the use cases is legal. Refer to our blog post (Scraping public pages is legal in the US) for more information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why use SerpApi?&lt;/strong&gt;&lt;br&gt;
There are some common challenges when scraping huge amounts of data from Google Maps: bypassing &lt;a href="https://en.wikipedia.org/wiki/CAPTCHA" rel="noopener noreferrer"&gt;CAPTCHAs&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/IP_address_blocking" rel="noopener noreferrer"&gt;IP blocking&lt;/a&gt;, rate limits, session timeouts, dynamic web structure, pagination and infinite scrolling, data variability complexity, data parsing and labelling, and legal and ethical considerations. Fortunately you don't need to tackle these problems yourself. &lt;a href="https://serpapi.com/" rel="noopener noreferrer"&gt;SerpApi&lt;/a&gt; takes care of them and provides high-quality &lt;a href="https://dev.tourl"&gt;Google Map Search Results APIs&lt;/a&gt; for your usage by using high quality proxies. SerpApi saves you a lot of time so you can concentrate on your business as scraping Google Maps data and other Google search results should be easy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Am I able to get all of the businesses in a particular city/country?&lt;/strong&gt;&lt;br&gt;
Getting all the businesses in a specific city or country is possible through our API. But, you will still need a way to list all of the specific businesses. If you already have that list, you can just submit each business name as a search on our API. If not, you can search for that specific business in each city or local subdivision of the country using our API until you build up a list that you’re happy with.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is there a no-code solution?&lt;/strong&gt;&lt;br&gt;
Yes, you can use our API in Google Sheets using our SerpApi extension in Google Sheets. We have a &lt;a href="https://serpapi.com/blog/connect-serp-api-with-google-sheet-no-code/" rel="noopener noreferrer"&gt;comprehensive tutorial&lt;/a&gt; for you.&lt;/p&gt;

&lt;p&gt;We strive to provide the best SERP scraper out there. Other than the Google Maps data scraper, you can find abundance of Google APIs, Bing APIs, and etc, feel free to checkout SerpApi for more details. Also if you have any questions, please feel free to &lt;a href="//mailto:terry@serpapi.com"&gt;contact me&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I wish Google worked this way</title>
      <dc:creator>Terry Tan</dc:creator>
      <pubDate>Thu, 20 Jun 2024 06:26:36 +0000</pubDate>
      <link>https://dev.to/terrytanys/i-wish-google-work-this-way-9od</link>
      <guid>https://dev.to/terrytanys/i-wish-google-work-this-way-9od</guid>
      <description>&lt;p&gt;LLMs are extremely effective at summarizing content. While hallucination remains a critical problem, the current stage of OpenAI’s GPT-4 is already useful for many tasks. One improvement I wish Google would implement is the ability to ask follow-up questions. This could be useful when quickly scanning through restaurant reviews. For example, we could ask a follow-up question like, “What’s good and bad about restaurant A?” and it would then extract the important pieces of information based on our question. Another example could be, “I just want to grab something quick; which restaurants should I choose?”. There are many use cases that can benefit from this improvement, and I believe it can significantly enhance everyone’s lives.&lt;/p&gt;

&lt;p&gt;The current stage of AI implementation by Google is only able to work with factual information most of the time. For example, asking the different between EV and ICE.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgn924oa3i5wwe80f32od.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgn924oa3i5wwe80f32od.png" alt="EV vs ICE Google Search" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When asked about the best sushi restaurant to dine in, the results are filtered based on user comments mentioning ‘best sushi’, which is fine but it appears across all the restaurants shown. Therefore, it is important to go through each of the user reviews to accurately gauge the quality for aspects you probably care about, such as service quality, cleanliness, freshness, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2i2xw18ndr8x64arur51.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2i2xw18ndr8x64arur51.png" alt="Google Search - Best sushi restaurant" width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A DIY Solution
&lt;/h2&gt;

&lt;p&gt;At &lt;a href="http://serpapi.com/"&gt;SerpApi&lt;/a&gt;, we help users scrape Google and other search engines. We have good amount of coverage on Google data, including, &lt;a href="https://serpapi.com/search-api"&gt;Google Search&lt;/a&gt;, &lt;a href="https://serpapi.com/google-maps-api"&gt;Google Maps&lt;/a&gt;, &lt;a href="https://serpapi.com/google-maps-reviews-api"&gt;Google Maps Reviews&lt;/a&gt;, &lt;a href="https://serpapi.com/google-trends-api"&gt;Google Trends&lt;/a&gt;, &lt;a href="https://serpapi.com/google-flights-api"&gt;Google Flights&lt;/a&gt;, &lt;a href="https://serpapi.com/google-hotels-api"&gt;Google Hotels&lt;/a&gt;, and many others. This give me the idea that I could build a simple DIY solution using the data we can access.&lt;/p&gt;

&lt;p&gt;This DIY solution is made possible with OpenAI’s GPT-4 and SerpApi’s Google Maps and Google Maps Reviews APIs. We first retrieve the places and reviews using SerpApi’s API and then pass each place’s data to OpenAI’s GPT-4 for summarization.&lt;/p&gt;

&lt;h3&gt;
  
  
  The inputs
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffoz04v0kja98ygqk2odq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffoz04v0kja98ygqk2odq.png" alt="TheGoTo inputs" width="800" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Building a follow-up question UI could take some times to tweak and make it work well. This UI could serve as a proof of concept, mainly aiming to have LLM perform the tasks for us. We have to provide the keyword we want to search and the location in GPS coordinates. You could search "Sushi restaurant", "Car Servicing", and etc. The preference is optional but it could improve the final result.&lt;/p&gt;

&lt;h3&gt;
  
  
  The results
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Looking for a quick grab at a sushi restaurant in New York&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oxZ6dshm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://serpapi.com/blog/content/images/2024/06/screencapture-localhost-3000-2024-06-19-12_23_57-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oxZ6dshm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://serpapi.com/blog/content/images/2024/06/screencapture-localhost-3000-2024-06-19-12_23_57-2.png" alt="Results from Looking for a quick grab at a sushi restaurant in New York" width="800" height="3083"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Honest and on time car servicing workshop in New York&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AdhW3P3k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://serpapi.com/blog/content/images/2024/06/screencapture-localhost-3000-2024-06-19-12_28_55-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AdhW3P3k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://serpapi.com/blog/content/images/2024/06/screencapture-localhost-3000-2024-06-19-12_28_55-1.png" alt="Results from Honest and on time car servicing workshop in New York" width="800" height="4315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is great because I can now read through all the good and bad reviews at a glance for each place. An obvious improvement I should make is to attach a reference link to each line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is the prompt given to the LLM&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You’re an expert reviewer. You are great at looking at the reviews for a given place and summarizing the good and bad aspects. It is also great to show a highlights section to the user. Take user preference (if present) into consideration when deciding if you recommend or not. When a JSON is provided by the user, look for the good and bad points, then return the result in JSON format with new keys ‘good’ and ‘bad’.

Response format:
{ good: [string], bad: [string], highlights: [string], recommended: true/false, reason: string }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Github Repository&lt;/strong&gt;: &lt;a href="https://github.com/tanys123/thegoto"&gt;https://github.com/tanys123/thegoto&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;LLM is a great piece of technology that can help improve everyone’s life when it is well implemented. Google most probably developing a ChatGPT version of Google, hopefully it is going to be good. For now, I would rely on &lt;a href="https://www.perplexity.ai/"&gt;Perplexity&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>llm</category>
      <category>google</category>
      <category>serp</category>
    </item>
    <item>
      <title>Every Google &amp;udm=? in the world</title>
      <dc:creator>Terry Tan</dc:creator>
      <pubDate>Tue, 18 Jun 2024 05:52:23 +0000</pubDate>
      <link>https://dev.to/terrytanys/every-google-udm-in-the-world-2a88</link>
      <guid>https://dev.to/terrytanys/every-google-udm-in-the-world-2a88</guid>
      <description>&lt;p&gt;Appends &lt;code&gt;udm=14&lt;/code&gt; to the Google search URL to instruct Google to only return the Web results. There is even an &lt;a href="https://chromewebstore.google.com/detail/google-udm14/ackpmepblmioeoofggbipphdaooogjga"&gt;extension&lt;/a&gt; and &lt;a href="https://udm14.com/"&gt;website&lt;/a&gt; built specifically for this use case. This is suitable for user who would like to have a clean search results without the clutter from Knowledge Graph, Local Results, Related Questions and etc. Now, there are others &lt;code&gt;udm=x&lt;/code&gt; than just &lt;code&gt;14&lt;/code&gt;. I have been doing some searching and compile all of them here.&lt;/p&gt;

&lt;p&gt;In fact, you most probably have been using some of the common &lt;code&gt;udm&lt;/code&gt;. For example, &lt;code&gt;udm=2&lt;/code&gt; is Images.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nkgbzp3eixigxbzx1u3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nkgbzp3eixigxbzx1u3.png" alt="udm=2" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or &lt;code&gt;udm=12&lt;/code&gt; which shows all the relevant news results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpt2dt3px15fi00t9selk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpt2dt3px15fi00t9selk.png" alt="udm=12" width="800" height="669"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An example for not so common &lt;code&gt;udm&lt;/code&gt; is &lt;code&gt;udm=15&lt;/code&gt; which shows &lt;strong&gt;Attractions&lt;/strong&gt; results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7yp10t1n84q2i87uaunc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7yp10t1n84q2i87uaunc.png" alt="udm=15" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And &lt;code&gt;udm=18&lt;/code&gt; which shows &lt;strong&gt;Forums&lt;/strong&gt; results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F14bno790aywgfeeahblu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F14bno790aywgfeeahblu.png" alt="udm=18" width="800" height="616"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;udm&lt;/code&gt; could be a useful capability in Google search, thus I have compile a intuitive list of country and their &lt;code&gt;udm&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Please note that the list is very long, it is impossible to test all of them with all the countries. Only use this as an exploration guide.&lt;/p&gt;

&lt;h2&gt;
  
  
  The List
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#2: Images
#6: Learn
#7: Videos
#12: News
#14: Web
#15: Attractions
#18: Forums
#28: Shopping
#36: Books
#37: Products
#44: Visual matches
#48: Exact matches
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This set of &lt;code&gt;udm&lt;/code&gt; should work with all the countries. The countries below are limited to the &lt;code&gt;udm&lt;/code&gt; mentioned above.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Canada (ca), United States (us), Mexico (mx), Belize (bz), Costa Rica (cr), Cuba (cu), Dominican Republic (do), El Salvador (sv), Guatemala (gt), Haiti (ht), Honduras (hn), Jamaica (jm), Nicaragua (ni), Panama (pa), Puerto Rico (pr), Trinidad and Tobago (tt), Argentina (ar), Bolivia (bo), Brazil (br), Chile (cl), Colombia (co), Ecuador (ec), Guyana (gy), Paraguay (py), Peru (pe), Suriname (sr), Uruguay (uy), Venezuela (ve), Andorra (ad), Monaco (mc), San Marino (sm), Switzerland (ch), United Kingdom (uk, gb), Vatican City (va), Albania (al), Belarus (by), Bosnia and Herzegovina (ba), Moldova (md), North Macedonia (mk), Russia (ru), Serbia and Montenegro (rs), Ukraine (ua), Bahrain (bh), Egypt (eg), Iran (ir), Iraq (iq), Israel (il), Jordan (jo), Kuwait (kw), Lebanon (lb), Oman (om), Palestinian Territory (ps), Qatar (qa), Saudi Arabia (sa), Syria (sy), United Arab Emirates (ae), Yemen (ye), Algeria (dz), Angola (ao), Benin (bj), Botswana (bw), Burkina Faso (bf), Burundi (bi), Cameroon (cm), Cape Verde (cv), Central African Republic (cf), Chad (td), Comoros (km), Congo (cg), Democratic Republic of the Congo (cd), Djibouti (dj), Egypt (eg), Equatorial Guinea (gq), Eritrea (er), Ethiopia (et), Gabon (ga), Gambia (gm), Ghana (gh), Guinea (gn), Guinea-Bissau (gw), Ivory Coast (ci), Kenya (ke), Lesotho (ls), Liberia (lr), Libya (ly), Madagascar (mg), Malawi (mw), Mali (ml), Mauritania (mr), Mauritius (mu), Morocco (ma), Mozambique (mz), Namibia (na), Niger (ne), Nigeria (ng), Rwanda (rw), Senegal (sn), Seychelles (sc), Sierra Leone (sl), Somalia (so), South Africa (za), Sudan (sd), Swaziland (sz), Tanzania (tz), Togo (tg), Tunisia (tn), Uganda (ug), Western Sahara (eh), Zambia (zm), Zimbabwe (zw), Kazakhstan (kz), Kyrgyzstan (kg), Tajikistan (tj), Turkmenistan (tm), Uzbekistan (uz), Afghanistan (af), Bangladesh (bd), Bhutan (bt), India (in), Maldives (mv), Nepal (np), Pakistan (pk), Sri Lanka (lk), China (cn), Japan (jp), Mongolia (mn), North Korea (kp), South Korea (kr), Taiwan (tw), Brunei (bn), Cambodia (kh), Indonesia (id), Laos (la), Malaysia (my), Myanmar (mm), Philippines (ph), Singapore (sg), Thailand (th), Timor-Leste (tl), Vietnam (vn), Australia (au), Fiji (fj), Kiribati (ki), Marshall Islands (mh), Micronesia (fm), Nauru (nr), New Zealand (nz), Palau (pw), Papua New Guinea (pg), Samoa (ws), Solomon Islands (sb), Tonga (to), Tuvalu (tv), Vanuatu (vu), American Samoa (as), Christmas Island (cx), Cocos (Keeling) Islands (cc), Cook Islands (ck), Faroe Islands (fo), Gibraltar (gi), Greenland (gl), Guam (gu), Hong Kong (hk), Macao (mo), Netherlands Antilles (an), Niue (nu), Norfolk Island (nf), Northern Mariana Islands (mp), Pitcairn (pn), Saint Helena (sh), Svalbard and Jan Mayen (sj), Tokelau (tk), Turks and Caicos Islands (tc), United States Minor Outlying Islands (um), Virgin Islands, U.S. (vi), Antarctica (aq), Bouvet Island (bv), Heard Island and McDonald Islands (hm)&lt;/em&gt;&lt;/p&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#9: Product sites
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;udm&lt;/code&gt; mentioned prior plus the &lt;code&gt;udm&lt;/code&gt; above are available for the countries below.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Anguilla (ai), Bermuda (bm), British Indian Ocean Territory (io), Cayman Islands (ky), Falkland Islands (fk), Montserrat (ms), South Georgia and the South Sandwich Islands (gs), Turks and Caicos Islands (tc), Virgin Islands, British (vg)&lt;/em&gt;&lt;/p&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#1: Places
#3: Products
#5: Lodging
#8: Jobs
#10: Job sites
#11: Places sites
#13: Airline options
#31: Flight sites
#32: Trains
#33: Buses
#34: Transport sites
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All the mentioned &lt;code&gt;udm&lt;/code&gt; plus the &lt;code&gt;udm&lt;/code&gt; above are available for the countries below, they are usually country from Europe.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Aruba (aw), Austria (at), Belgium (be), Bulgaria (bg), Croatia (hr), Cyprus (cy), Czech Republic (cz), Denmark (dk), Estonia (ee), Finland (fi), France (fr), French Guiana (gf), French Polynesia (pf), French Southern Territories (tf), Germany (de), Greece (gr), Guadeloupe (gp), Hungary (hu), Iceland (is), Ireland (ie), Italy (it), Latvia (lv), Liechtenstein (li), Lithuania (lt), Luxembourg (lu), Malta (mt), Martinique (mq), Mayotte (yt), Netherlands (nl), New Caledonia (nc), Norway (no), Poland (pl), Portugal (pt), Reunion (re), Romania (ro), Saint Pierre and Miquelon (pm), Slovakia (sk), Slovenia (si), Spain (es), Sweden (se), Turkey (tr), Wallis and Futuna (wf)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;There you have it. If you find this list useful, please share it to your friends, family and colleagues.&lt;/p&gt;

&lt;p&gt;If you find any mistakes, feel free to contact me (&lt;a href="mailto:terry@serpapi.com"&gt;terry@serpapi.com&lt;/a&gt;).&lt;/p&gt;




&lt;p&gt;Join us on &lt;a href="https://twitter.com/serp_api"&gt;X&lt;/a&gt; | &lt;a href="https://www.youtube.com/channel/UCUgIHlYBOD3yA3yDIRhg_mg"&gt;YouTube&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add a  &lt;a href="https://github.com/serpapi/public-roadmap/issues"&gt;Feature Request&lt;/a&gt;💫 or a &lt;a href="https://github.com/serpapi/public-roadmap/issues"&gt;Bug&lt;/a&gt;🐞&lt;/p&gt;

</description>
      <category>google</category>
      <category>serp</category>
    </item>
    <item>
      <title>My Experience building with OpenAI's Assistants API</title>
      <dc:creator>Terry Tan</dc:creator>
      <pubDate>Fri, 24 Nov 2023 06:40:36 +0000</pubDate>
      <link>https://dev.to/terrytanys/my-experience-building-with-openais-assistants-api-226b</link>
      <guid>https://dev.to/terrytanys/my-experience-building-with-openais-assistants-api-226b</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;TLDR: Like most API products in the market, Assistants API allow us to build the core of our product&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A lot of amazing stuffs are announced on OpenAI DevDay like GPT-4 Turbo with 128k context, GPT with Vision and lower pricing. The one I am fond with is the new Assistants API.&lt;/p&gt;

&lt;p&gt;I have already experimenting with chatbot apps for awhile now before the launch of Assistants API. If you are going to build a chatbot with your own knowledge base, you are most likely to stumble upon the concept of RAG (Retrieval-augmented generation). It is fairly easy to get started and build something that actually work. Langchain has a great &lt;a href="https://python.langchain.com/docs/expression_language/cookbook/retrieval"&gt;tutorial&lt;/a&gt; on that.&lt;/p&gt;

&lt;p&gt;However, there are actually a lot of steps and decisions to be taken care of behind the scene.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trunacating the document

&lt;ul&gt;
&lt;li&gt;Because of the limited context length, we have to split a document into multiple chunks.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Calculate document embeddings and store it in a Vector DB&lt;/li&gt;
&lt;li&gt;Decide the number of documents to retrieve

&lt;ul&gt;
&lt;li&gt;Retrieving too much document will lead to unrelavant result&lt;/li&gt;
&lt;li&gt;Retrieving too little document might miss out important information&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Avoiding duplicated documents&lt;/li&gt;
&lt;li&gt;Managing chat history

&lt;ul&gt;
&lt;li&gt;We have to truncate the chat in case it grow too large&lt;/li&gt;
&lt;li&gt;We have to decide how to truncate so that the context is retain&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Document citation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of this is taken care by Assistants API which reduced the steps to just uploading the document. The downside are the number of documents is limited to 20 as of now and the overall cost might be higher compare to doing all yourself.&lt;/p&gt;




&lt;p&gt;If you are still interested, I will share the experience building with Assistants API for &lt;a href="https://github.com/serpapi/wander"&gt;Wander&lt;/a&gt; which focus on Function Call. I was trying to replicate the Wanderlust demo shown in the DevDay&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.youtube.com/live/U9mJuUkhUzk?si=m0X39cFbS-zZPrSk&amp;amp;amp%3Bt=2083" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--r0Q2k09f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.ytimg.com/vi/U9mJuUkhUzk/maxresdefault.jpg" height="450" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.youtube.com/live/U9mJuUkhUzk?si=m0X39cFbS-zZPrSk&amp;amp;amp%3Bt=2083" rel="noopener noreferrer" class="c-link"&gt;
          OpenAI DevDay, Opening Keynote - YouTube
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Join us for the opening keynote from OpenAI DevDay — OpenAI’s first developer conference.We’re gathering developers from around the world for an in-person da...
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--fuBbT0Up--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.youtube.com/s/desktop/bd3558ba/img/favicon.ico" width="16" height="16"&gt;
        youtube.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Wander Demo:&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.youtube.com/watch?si=8LM9DfVssQ6AbBzG&amp;amp;v=eFB4O9oI0LQ&amp;amp;feature=youtu.be" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--mv6fOs5n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.ytimg.com/vi/eFB4O9oI0LQ/maxresdefault.jpg" height="450" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.youtube.com/watch?si=8LM9DfVssQ6AbBzG&amp;amp;v=eFB4O9oI0LQ&amp;amp;feature=youtu.be" rel="noopener noreferrer" class="c-link"&gt;
          Wander Demo - YouTube
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Demo for github.com/serpapi/wander
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--fuBbT0Up--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.youtube.com/s/desktop/bd3558ba/img/favicon.ico" width="16" height="16"&gt;
        youtube.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Check out the &lt;a href="https://github.com/serpapi/wander"&gt;Wander Github Repo&lt;/a&gt; if you are interested. I enhanced it with real-time data using &lt;a href="https://serpapi.com/google-maps-api"&gt;SerpApi Google Maps API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;First time seeing the demo, I thought probably that's how the future of UIUX is gonna be like. Even though the demo of showing markers on map is relative small use case but I believe people will find way to implement them effectively on their applications. Here is an great &lt;a href="https://www.intercom.com/blog/ai-chatbots-user-interfaces/"&gt;article&lt;/a&gt; that explain the concept I want to talk about.&lt;/p&gt;

&lt;p&gt;I believe you can build all this with Chat Completions API alone, but Assistants API just make everything easier. For example, the flow of chat is managed. It tells you when it is time to handle Function call and the output from the Function call should submit to the API to get the next step.&lt;/p&gt;

&lt;p&gt;Currently the execution especially those include Function call is taking too long (50s+) and streaming is not supported yet. These are the two most important improvements that can really make it usuable in production.&lt;/p&gt;

&lt;p&gt;I haven't use Assistants API for scale and production level, so the information I can share is limited. If you have deployed it to production, do let me know!&lt;/p&gt;

</description>
      <category>openai</category>
      <category>javascript</category>
      <category>ai</category>
    </item>
    <item>
      <title>Real-time data for OpenAI Assistants API</title>
      <dc:creator>Terry Tan</dc:creator>
      <pubDate>Thu, 16 Nov 2023 03:48:30 +0000</pubDate>
      <link>https://dev.to/terrytanys/real-time-data-for-openai-assistants-api-1ao4</link>
      <guid>https://dev.to/terrytanys/real-time-data-for-openai-assistants-api-1ao4</guid>
      <description>&lt;p&gt;The Assistants API by OpenAI makes creating chatbot applications easier than ever. Before this, we had to manage chat history for the users and implement Retrieval Augmented Generation (RAG) on our own, but all of that is already taken care of now by Assistants API.&lt;/p&gt;

&lt;p&gt;The impressive demo at OpenAI DevDay made me think about the changes to the future UIUX. The demo is accomplished by using Assistants API.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/U9mJuUkhUzk?start=2110"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;After a few failed attempts to find the repository for Wanderlust, I tried to recreate my own &lt;a href="https://github.com/serpapi/Wander"&gt;Wander&lt;/a&gt; to satisfy my curiosity. Annotating the map is cool and I thought it would be even more useful if we could get real-time Google Maps data to show local businesses like cafes, restaurants, convenience stores etc. &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/eFB4O9oI0LQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="https://github.com/serpapi/wander"&gt;Wander Github Repo&lt;/a&gt; if you are interested. The entire solution is built on &lt;a href="https://platform.openai.com/docs/assistants/overview"&gt;OpenAI Assistants API&lt;/a&gt; and &lt;a href="https://serpapi.com/google-maps-api"&gt;SerpApi Google Maps API&lt;/a&gt;. You have to sign up on the respective website for the API key. &lt;a href="https://serpapi.com/"&gt;SerpApi&lt;/a&gt; provides free searches upon signing up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;p&gt;OpenAI Assistants API is a powerful feature for building a very well-rounded chat application. Providing it with real-time data makes it even more capable.&lt;/p&gt;

</description>
      <category>openai</category>
      <category>serpapi</category>
      <category>chatgpt</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Scrape Google Trends Trending Now in Javascript</title>
      <dc:creator>Terry Tan</dc:creator>
      <pubDate>Mon, 30 Oct 2023 08:24:45 +0000</pubDate>
      <link>https://dev.to/terrytanys/scrape-google-trends-trending-now-in-javascript-421p</link>
      <guid>https://dev.to/terrytanys/scrape-google-trends-trending-now-in-javascript-421p</guid>
      <description>&lt;p&gt;We have already covered scraping &lt;a href="https://serpapi.com/blog/google-trends-real-time-searches/"&gt;Google Trends Trending Now in Python&lt;/a&gt; and if you are looking to extract data from the &lt;a href="https://trends.google.com/trends/explore"&gt;Google Trends Explore&lt;/a&gt;, we already have a &lt;a href="https://serpapi.com/blog/scrape-google-trends-with-python/"&gt;blog post&lt;/a&gt; that demo it in detail. In this tutorial, we will be using SerpApi's &lt;a href="https://serpapi.com/google-trends-trending-now?ref=serpapi.com"&gt;Google Trends Trending Now API&lt;/a&gt; to scrape &lt;a href="https://trends.google.com/trends/trendingsearches/daily?ref=serpapi.com"&gt;Google Trends Trending Now&lt;/a&gt; in Javascript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google Trends' Trending Now
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TJwBdRon--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/45fz9xhq4ti095645pzm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TJwBdRon--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/45fz9xhq4ti095645pzm.png" alt="Google Trends Daily Search Trends" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pPEiknT---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rj1uf82vvhgsx65uwijw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pPEiknT---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rj1uf82vvhgsx65uwijw.png" alt="Google Trends Realtime Search Trends" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Google Trends Explore allow you to get data for specific query or compare trends between queries. As for Google Trends’ Trending Now, it shows the top queries for the day from pool of Google Trends data.&lt;/p&gt;

&lt;p&gt;There are two parts of Trending Now: the first one is Daily Search Trends, and the second is Real-time Search Trends.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://trends.google.com/trends/trendingsearches/daily?geo=US&amp;amp;hl=en-US&amp;amp;ref=serpapi.com"&gt;Daily Search Trends&lt;/a&gt; focus on a single query and its performance throughout a specific day. Unique to Daily Search Trends, it offers data for the past few weeks or even months. It is suitable if you would like to query historical data of trending searches.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://trends.google.com/trends/trendingsearches/realtime?geo=US&amp;amp;hl=en-US&amp;amp;category=all&amp;amp;ref=serpapi.com"&gt;Realtime Search Trends&lt;/a&gt; provide a dynamic and up-to-the-minute view of what is currently trending. It usually combines with multiple queries. This section displays topics and search queries as they unfold in real time. Unlike Daily Search Trends, Real-time Search Trends are not confined to a 24-hour window. They continuously update as new trends emerge and fade, making them ideal for tracking breaking news, sports events, and social media trends as they happen.&lt;/p&gt;

&lt;p&gt;In summary, the main difference between Daily Search Trends and Real-time Search Trends lies in their time frames and purposes. Daily Search Trends provide a retrospective view of the previous 24 hours or even weeks, making them suitable for analyzing what was trending on a specific day. On the other hand, Real-time Search Trends offer a dynamic, live view of what is currently trending, making them ideal for staying up to date with rapidly evolving events and topics.&lt;/p&gt;

&lt;p&gt;Google Trends’ Trending Now can be valuable tool for various use cases including content creation, news, journalism, product research, marketing and SEO, trend analysis, location-based insights and many others.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use an API?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;No need to create a parser from scratch and maintain it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bypass blocks from Google: solve CAPTCHA or solve IP blocks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No need to pay for proxies, and CAPTCHA solvers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don't need to use browser automation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://serpapi.com/?ref=serpapi.com"&gt;SerpApi&lt;/a&gt; take care of everything mentioned above with fast response times under &lt;code&gt;~2.47 seconds&lt;/code&gt; (&lt;code&gt;~1.33 seconds&lt;/code&gt; with Ludicrous speed) per request. The result is a well structured data in JSON with only single API call.&lt;/p&gt;

&lt;p&gt;Response times and success rates are shown under &lt;a href="https://serpapi.com/status?ref=serpapi.com"&gt;SerpApi Status page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rPQpRMuZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fg782ivoysytexwewv05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rPQpRMuZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fg782ivoysytexwewv05.png" alt="SerpApi's status page" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Full code
&lt;/h2&gt;

&lt;p&gt;If you don't need an explanation, feel free to copy and paste the code into your favorite IDE and start running. Otherwise, you can follow the step-by-step-guide code explanation to know what each of the line is doing. You can also check out our &lt;a href="https://serpapi.com/playground?engine=google_trends_trending_now&amp;amp;frequency=daily&amp;amp;geo=US&amp;amp;hl=en&amp;amp;ref=serpapi.com"&gt;playground&lt;/a&gt;, which is very handy to play around with the API and get a sense of how things work.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getJson&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;serpapi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;SERPAPI_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;// Get your API_KEY from https://serpapi.com/manage-api-key&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;SERPAPI_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;google_trends_trending_now&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;frequency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;daily&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// daily or realtime&lt;/span&gt;
  &lt;span class="na"&gt;geo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;US&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;hl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;en&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getJson&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Prerequisite
&lt;/h2&gt;

&lt;p&gt;Install library:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;serpapi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://www.npmjs.com/package/serpapi?ref=serpapi.com"&gt;serpapi&lt;/a&gt; is an official SerpApi API package. Follow this &lt;a href="https://docs.npmjs.com/downloading-and-installing-node-js-and-npm?ref=serpapi.com"&gt;guide&lt;/a&gt; to get your Node.js and &lt;code&gt;npm&lt;/code&gt; install if you haven’t done so.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code Explanation
&lt;/h2&gt;

&lt;p&gt;First, we need to import the library&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getJson&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;serpapi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, we set the required parameters. A list of parameters and their detailed explanation can be found on our &lt;a href="https://serpapi.com/google-trends-trending-now?ref=serpapi.com"&gt;documentation&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;SERPAPI_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// https://serpapi.com/manage-api-key&lt;/span&gt;
  &lt;span class="na"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;google_trends_trending_now&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Make sure the right engine is set&lt;/span&gt;
  &lt;span class="na"&gt;frequency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;daily&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// daily or realtime&lt;/span&gt;
  &lt;span class="na"&gt;geo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;US&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Location to search for&lt;/span&gt;
  &lt;span class="na"&gt;hl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;en&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;// Language of the results&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once parameters is defined, everything else will be taken care by the library, for example, making the actual API request. Calling &lt;code&gt;getJson&lt;/code&gt; to make the API request and JSON data will be returned and assigned it to &lt;code&gt;response&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getJson&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Output:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"daily_searches"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"20231025"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"searches"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Maine shooting"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"google_trends_link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://trends.google.com/trends/explore?q=Maine+shooting&amp;amp;date=now+7-d&amp;amp;geo=US"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"serpapi_google_trends_link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://serpapi.com/search.json?data_type=TIMESERIES&amp;amp;date=now+7-d&amp;amp;engine=google_trends&amp;amp;geo=US&amp;amp;q=Maine+shooting&amp;amp;tz=420"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"traffic"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"related_queries"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"lewiston maine"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"google_trends_link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://trends.google.com/trends/explore?q=lewiston+maine&amp;amp;date=now+7-d&amp;amp;geo=US"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"serpapi_google_trends_link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://serpapi.com/search.json?data_type=TIMESERIES&amp;amp;date=now+7-d&amp;amp;engine=google_trends&amp;amp;geo=US&amp;amp;q=lewiston+maine&amp;amp;tz=420"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"articles"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Manhunt for Maine shooting suspect enters second day"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.bbc.com/news/world-us-canada-67232966"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"snippet"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Hundreds of law enforcement personnel are part of the search as towns remain under shelter in place orders."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BBC News"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1h ago"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"thumbnail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://t1.gstatic.com/images?q=tbn:ANd9GcR-vgroBO4SB7JAB8HE4J8fOBmF01lY6K-HUBMB0Vbc2lfIGqc_p3qDuE6wuZPTXjIEEBycQD0O"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Celtics"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"google_trends_link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://trends.google.com/trends/explore?q=Celtics&amp;amp;date=now+7-d&amp;amp;geo=US"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"serpapi_google_trends_link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://serpapi.com/search.json?data_type=TIMESERIES&amp;amp;date=now+7-d&amp;amp;engine=google_trends&amp;amp;geo=US&amp;amp;q=Celtics&amp;amp;tz=420"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"traffic"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"related_queries"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Knicks"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"google_trends_link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://trends.google.com/trends/explore?q=Knicks&amp;amp;date=now+7-d&amp;amp;geo=US"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"serpapi_google_trends_link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://serpapi.com/search.json?data_type=TIMESERIES&amp;amp;date=now+7-d&amp;amp;engine=google_trends&amp;amp;geo=US&amp;amp;q=Knicks&amp;amp;tz=420"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"articles"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Kristaps Porzingis scores 30, seals win at MSG in Celtics debut ..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.espn.com/nba/story/_/id/38746584/kristaps-porzingis-scores-30-seals-win-vs-knicks-celtics-debut"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"snippet"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Kristaps Porzingis set a franchise record with 30 points in his Celtics debut and took over down the stretch to lead his new team past his old one Wednesday ..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ESPN"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"22h ago"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"thumbnail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://t0.gstatic.com/images?q=tbn:ANd9GcTdwRxz8dK0cXCRMX35ovYaRffEbtVoTvpFbfmsYuCC7K76Y5DSnOKKJKi4xE24vqwFFXbs7A6h"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Spurs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"google_trends_link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://trends.google.com/trends/explore?q=Spurs&amp;amp;date=now+7-d&amp;amp;geo=US"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"serpapi_google_trends_link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://serpapi.com/search.json?data_type=TIMESERIES&amp;amp;date=now+7-d&amp;amp;engine=google_trends&amp;amp;geo=US&amp;amp;q=Spurs&amp;amp;tz=420"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"traffic"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"related_queries"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Wembanyama"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"google_trends_link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://trends.google.com/trends/explore?q=Wembanyama&amp;amp;date=now+7-d&amp;amp;geo=US"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"serpapi_google_trends_link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://serpapi.com/search.json?data_type=TIMESERIES&amp;amp;date=now+7-d&amp;amp;engine=google_trends&amp;amp;geo=US&amp;amp;q=Wembanyama&amp;amp;tz=420"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"articles"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Victor Wembanyama finishes with 15 points in debut as Spurs lose ..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.espn.com/nba/story/_/id/38746746/victor-wembanyama-15-points-debut-spurs-lose"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"snippet"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SAN ANTONIO -- As Victor Wembanyama walked on to the Frost Bank Center court during pregame warmups for his NBA regular-season debut, he spread his arms ..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ESPN"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"15h ago"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"thumbnail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://t0.gstatic.com/images?q=tbn:ANd9GcSlm55dFiq8eyKV7otfGAXOGknwusoMZamiiIPvtiyiGcLfQ--O9_6DErU1V8oAwS1jguLgXnlD"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"serpapi_pagination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"current_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"20231025"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"next_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"20231024"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"next"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://serpapi.com/search.json?date=20231024&amp;amp;engine=google_trends_trending_now&amp;amp;frequency=daily&amp;amp;geo=US&amp;amp;hl=en"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Next Date Result
&lt;/h2&gt;

&lt;p&gt;Similar code but to get the next date result, we have to get and set the &lt;code&gt;date&lt;/code&gt; with &lt;code&gt;next_date&lt;/code&gt; return by the first API call. You can get the next date result as long as the API is returning &lt;code&gt;next_date&lt;/code&gt;, which mean you reach the end of result when there is no &lt;code&gt;next_date&lt;/code&gt; return from the API.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nextDate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;serpapi_pagination&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next_date&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nextDateResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getJson&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;nextDate&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Other Parameters
&lt;/h2&gt;

&lt;p&gt;Here is a list of combination of parameters that you can use to get different results. &lt;code&gt;api_key&lt;/code&gt; is omitted for simplicity.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Daily Search Trends in France&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;google_trends_trending_now&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;frequency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;daily&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;geo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;FR&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;hl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;en&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Daily Search Trends in France at 1st of October 2023&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;google_trends_trending_now&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;frequency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;daily&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;20231001&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;geo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;FR&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;hl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;en&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Realtime Search Trends in United States&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;google_trends_trending_now&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;frequency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;realtime&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;geo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;US&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;hl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;en&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Realtime Search Trends in the United States for the Sports category&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;google_trends_trending_now&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;frequency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;realtime&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;geo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;US&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;hl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;en&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;cat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;s&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Next page results of the Realtime Search Trends in the United States for the Sports category&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;engine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;google_trends_trending_now&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;frequency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;realtime&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;geo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;US&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;hl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;en&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;cat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;s&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;next_page_token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;WyJVU19sbmtfNnNEUm1BQUFBQUE3Mk1fZW4iLCJVU19sbmtfSHFrZ2xnQUFBQUEtdk1fZW4iLCJVU19sbmtfbnhqSWx3QUFBQUJYRE1fZW4iLCJVU19sbmtfOC1iWW1BQUFBQUFyX01fZW4iLCJVU19sbmtfMUl2TGx3QUFBQUFmbk1fZW4iLCJVU19sbmtfWnozLW1BQUFBQUNaSk1fZW4iLCJVU19sbmtfb1E0Qm1RQUFBQUNnRk1fZW4iLCJVU19sbmtfeUVmc21BQUFBQUFrWE1fZW4iLCJVU19sbmtfWF9uZ2x3QUFBQUNfN01fZW4iLCJVU19sbmtfR3BWcG1BQUFBQUJ6ak1fZW4iLCJVU19sbmtfLXpmdW1BQUFBQUFWTE1fZW4iLCJVU19sbmtfZkVqYmx3QUFBQUNuWE1fZW4iLCJVU19sbmtfMzVtRmx3QUFBQUJhak1fZW4iLCJVU19sbmtfWWdSS21BQUFBQUFvSE1fZW4iLCJVU19sbmtfTGlMMW1BQUFBQURiT01fZW4iLCJVU19sbmtfODFBSm1BQUFBQUQ2U01fZW4iLCJVU19sbmtfZDY1NW1BQUFBQUFPdE1fZW4iLCJVU19sbmtfNHhMcGx3QUFBQUFLQk1fZW4iLCJVU19sbmtfV3VVdGx3QUFBQUIzOE1fZW4iLCJVU19sbmtfTUJIem1BQUFBQUREQ01fZW4iXQ==&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Documentation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://serpapi.com/google-trends-trending-now?ref=serpapi.com"&gt;Google Trends Trending Now API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://serpapi.com/google-trends-api?ref=serpapi.com"&gt;Google Trends API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;p&gt;Google Trends' Trending Now is a great data source for understanding the events happening in real time or in the past. SerpApi provides a simple yet powerful solution to scrape those data without any headache on blocking and maintenance as compare to your typical web scraping experience. Alternatively, you can checkout &lt;a href="https://github.com/GeneralMills/pytrends?ref=serpapi.com"&gt;pytrends github repository&lt;/a&gt; which is a popular Python open source google trends scraper.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>javascript</category>
      <category>api</category>
    </item>
    <item>
      <title>How many percent of your work is not building the core business logic?</title>
      <dc:creator>Terry Tan</dc:creator>
      <pubDate>Thu, 10 Jun 2021 06:09:07 +0000</pubDate>
      <link>https://dev.to/terrytanys/how-many-percent-of-your-work-is-not-building-the-core-business-logic-43oj</link>
      <guid>https://dev.to/terrytanys/how-many-percent-of-your-work-is-not-building-the-core-business-logic-43oj</guid>
      <description>&lt;p&gt;We have built a chatbot + commerce solution on Messenger for businesses. Businesses can use our solution for Facebook Live Selling and Facebook Ads, no website is needed. Customer make comment and the bot will lead them to Messenger to complete the purchase, it works seamlessly.&lt;/p&gt;

&lt;p&gt;We have actually deployed to few clients. The thing is each client will have different CRM system, Payment Gateway, Logistic system. Before we launch, our team need to spend few weeks building the integration. It is necessary but actually not the core of our software.&lt;/p&gt;

&lt;p&gt;I am not complaining about it. But I think there must be a lot of software out there always need to write this integration layer, which it is identical to the other system. So wouldn't it be great if there is an integration layer we can plug into our software and it will work just with few lines of code?&lt;/p&gt;

&lt;p&gt;For example, the integration layer already integrated with Payment Gateway A, B and C. My software just need to integrate with the integration layer and all 3 payment gateways will be available on my system.&lt;/p&gt;

&lt;p&gt;This is very high level view, let me know if you have any questions. More important, feel free to share your opinion 😊.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>architecture</category>
      <category>webdev</category>
      <category>react</category>
    </item>
  </channel>
</rss>
