How to scrape restaurant data from Visit Fort Wayne using the Minexa API
- Minexa.ai

- Jul 2
- 4 min read
The data below was extracted from the Visit Fort Wayne restaurant directory in a single API call. Before explaining how the pipeline works, here is what the output looks like.
What the extracted data looks like
Each row in the response corresponds to one restaurant listing on the Visit Fort Wayne page. Here are three labelled records from the extraction:
[
{
"restaurant_name": "Wagyu Burger Shack",
"listing_url": "/listing/wagyu-burger-shack/55389/",
"external_link": "https://www.facebook.com/profile.php?id=61567027311800",
"image_lazy_src": "https://assets.simpleviewinc.com/.../wagyu_burger_shack.jpg",
"button_class": "actionButton website",
"item_class": "item dtn",
"ad_rec_id": "55389",
"lazy_index": "5"
},
{
"restaurant_name": "Dae Gee Korean BBQ",
"listing_url": "/listing/dae-gee-korean-bbq/55053/",
"external_link": "https://daegeefortwayne.com/",
"image_lazy_src": "https://assets.simpleviewinc.com/.../dae_gee.jpg",
"button_class": "actionButton website",
"item_class": "item dtn",
"ad_rec_id": "55053",
"lazy_index": "6"
},
{
"restaurant_name": "Three Rivers Co Op Natural Grocery and Deli",
"listing_url": "/listing/three-rivers-co-op-natural-grocery-and-deli/53495/",
"external_link": "/listing/three-rivers-co-op-natural-grocery-and-deli/53495/",
"button_class": "actionButton",
"item_class": "item",
"ad_rec_id": "53495",
"lazy_index": "12"
}
]
Notice the difference between the first two records and the third. The button_class field reads actionButton website for the first two and just actionButton for the third. That single class difference tells you whether a listing has an external website linked. Similarly, item_class is item dtn for sponsored placements and item for standard ones, giving you a clean way to separate promoted from organic listings in your dataset.
The data_gtm_vars field, not shown above for brevity, contains a JSON string per row encoding the listing label, its record ID, its row position on the page, and its global row position across paginated results. That field is useful when you need to reconstruct the original display order or cross-reference listings with analytics events.
Watch the full tutorial first
The video below walks through the complete scraper setup from the Minexa Chrome extension through to the API request configuration. Watch it before going through the screenshots if you prefer a continuous walkthrough.
How the scraper was trained
The scraper that produced the data above was created using the Minexa Chrome extension. Here is the sequence of steps involved.
Start by opening the Minexa extension on the Visit Fort Wayne restaurants page. The extension detects the current URL and asks you to confirm you are on the right page.
After confirming, the extension scans the page and lists any pagination it detects. For the Visit Fort Wayne restaurant directory, pagination is present across multiple pages of listings. Review what was detected and click Continue.
Next you choose whether to scrape the listing page only or to follow each listing URL and extract detail page data as well. For building a restaurant directory dataset, scraping the list is sufficient to get names, images, links, and classification fields.
Select simple mode on the next screen to let Minexa handle field discovery automatically. You do not need to define a schema or specify which columns to extract.
The extension highlights the data container automatically. This is the parent HTML element wrapping all restaurant cards on the page. You are selecting the container, not individual fields. Minexa discovers the individual columns from there.
Once you click Create Scraper, all extracted columns become visible in the preview panel. Use the next and previous navigation to review each data point before proceeding.
Click API Request in the top right to view the pre-generated Python code and JSON request body. This is where you get your scraper ID and the ready-to-run code for the next step.
Calling the Minexa API
Once the scraper is trained and you have your scraper ID, extraction at scale is a straightforward POST request. Here is a working example using the scraper created above:
import requests
url = "https://api.minexa.ai/data/"
api_key = "YOUR_API_KEY"
data = {
"batches": [
{
"scraper_id": 4302,
"columns": ["top_30"],
"urls": [
"https://www.visitfortwayne.com/food-drink/restaurants/",
"https://www.visitfortwayne.com/food-drink/restaurants/?page=2"
],
"scraping": {
"js_render": True,
"timeout": 30,
"js_code": [
{"wait_time": 2},
{"page_init": True},
{"wait_time": 4}
],
"proxy": "verified",
"retry": 3
}
}
],
"threads": 4
}
headers = {"Content-Type": "application/json", "api-key": api_key}
response = requests.post(url, json=data, headers=headers)
print(response.json())
A few things worth noting about this request. The columns parameter is set to top_30, which tells Minexa to return the 30 highest-ranked fields for each page. You can also pass an explicit list of column names if you only want specific fields. Both approaches cost the same. The threads value controls how many URLs are processed in parallel, so increasing it speeds up extraction across larger URL sets.
Pagination is not handled automatically when using the API. You need to build the list of paginated URLs yourself and pass them in the urls array, or write a JS code scenario that triggers the next page action. The Chrome extension handles pagination automatically, but the API gives you full control over which URLs get processed and when.
If you want to run extraction continuously and save results as you go, the full checkpoint-based Python script in the Minexa docs handles pagination across API responses automatically, writing JSON, CSV, and Excel files at each iteration.
Ready to build your own restaurant data pipeline? Install the Minexa Chrome extension to train your scraper, then call the API with your URL list to extract at whatever scale you need.
For a related walkthrough covering a similar structured listing extraction use case, see how to scrape business intelligence data from the Innovation Funding Service using the Minexa API.

Comments