ScavioScavio
ProductPricingDocs
Sign InGet Started
  1. Home
  2. Tutorials
  3. How to Build QSR Operator List Pipeline
Tutorial

How to Build QSR Operator List Pipeline

Build a list of QSR franchise operators by location using search API. Discover owners, locations, and contact info at $0.005/query.

Get Free API KeyAPI Docs

Quick-service restaurant (QSR) operators are high-value B2B targets for food service vendors, POS companies, and delivery platforms. This tutorial builds a pipeline that discovers QSR operators by brand and location, identifies multi-unit operators, and exports contact data. Each location search costs $0.005.

Prerequisites

  • Python 3.8+
  • requests library
  • A Scavio API key from scavio.dev
  • Target QSR brands and markets

Walkthrough

Step 1: Search for QSR franchise locations and operators

Find franchise locations and extract operator information from search results.

Python
import os, requests, json, csv
from datetime import datetime
from collections import defaultdict, Counter

API_KEY = os.environ['SCAVIO_API_KEY']
SH = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}

BRANDS = ['Subway', 'Chick-fil-A', 'Wingstop']
MARKETS = ['Dallas TX', 'Atlanta GA', 'Phoenix AZ']

def find_operators(brand, market):
    queries = [
        f'{brand} franchise owner {market}',
        f'{brand} operator {market} locations',
    ]
    operators = []
    for query in queries:
        data = requests.post('https://api.scavio.dev/api/v1/search',
            headers=SH, json={'query': query, 'country_code': 'us'}, timeout=10).json()
        for r in data.get('organic_results', []):
            operators.append({
                'brand': brand,
                'market': market,
                'title': r.get('title', ''),
                'link': r.get('link', ''),
                'snippet': r.get('snippet', '')[:150],
                'source': r.get('displayed_link', ''),
            })
    return operators

all_operators = []
for brand in BRANDS:
    for market in MARKETS:
        ops = find_operators(brand, market)
        all_operators.extend(ops)
        print(f'  {brand:15} in {market:12} | {len(ops)} results')

total_queries = len(BRANDS) * len(MARKETS) * 2
print(f'\nTotal results: {len(all_operators)}')
print(f'Cost: ${total_queries * 0.005:.3f}')

Step 2: Extract and categorize operator data

Parse operator names, identify multi-unit operators, and categorize by source.

Python
def categorize_results(operators):
    categories = defaultdict(list)
    for op in operators:
        link = op['link'].lower()
        if 'linkedin' in link:
            categories['linkedin'].append(op)
        elif 'businessjournals' in link or 'qsrmagazine' in link or 'nrn.com' in link:
            categories['trade_press'].append(op)
        elif 'franchisedisclosure' in link or 'franchise' in link:
            categories['franchise_docs'].append(op)
        else:
            categories['other'].append(op)
    print(f'\n=== Results by Source ===')
    for cat, items in categories.items():
        print(f'  {cat:20} | {len(items)} results')
    return categories

def find_multi_unit(operators):
    """Identify mentions of multi-unit operators (most valuable targets)."""
    multi_unit = []
    keywords = ['multi-unit', 'multi unit', 'franchise group', 'operates', 'locations',
                 'franchisee', 'largest operator']
    for op in operators:
        text = f'{op["title"]} {op["snippet"]}'.lower()
        if any(kw in text for kw in keywords):
            multi_unit.append(op)
    print(f'\n=== Multi-Unit Operator Mentions ===')
    print(f'  Found: {len(multi_unit)} mentions')
    for op in multi_unit[:5]:
        print(f'  [{op["brand"]}] {op["title"][:50]}')
        print(f'    {op["snippet"][:80]}')
    return multi_unit

categories = categorize_results(all_operators)
multi_unit = find_multi_unit(all_operators)

Step 3: Export operator list for outreach

Clean and export the operator list for sales team use.

Python
def export_operator_list(operators, multi_unit):
    # Deduplicate by link
    seen = set()
    unique = []
    for op in operators:
        if op['link'] not in seen:
            seen.add(op['link'])
            unique.append(op)
    filename = f'qsr_operators_{datetime.now().strftime("%Y%m%d")}.csv'
    with open(filename, 'w', newline='') as f:
        writer = csv.DictWriter(f, fieldnames=['brand', 'market', 'title', 'link', 'source', 'snippet'])
        writer.writeheader()
        for op in unique:
            writer.writerow({k: op[k] for k in writer.fieldnames})
    print(f'\n=== QSR Operator Pipeline Summary ===')
    print(f'  Brands searched: {len(BRANDS)}')
    print(f'  Markets searched: {len(MARKETS)}')
    print(f'  Total results: {len(operators)}')
    print(f'  Unique results: {len(unique)}')
    print(f'  Multi-unit mentions: {len(multi_unit)}')
    print(f'  Exported to: {filename}')
    # Brand breakdown
    print(f'\n  By Brand:')
    brand_counts = Counter(op['brand'] for op in unique)
    for brand, count in brand_counts.most_common():
        print(f'    {brand:15} | {count} results')
    print(f'\n  Cost: ${len(BRANDS) * len(MARKETS) * 2 * 0.005:.3f}')
    print(f'  vs. Data brokers: $500+ for QSR operator lists')

export_operator_list(all_operators, multi_unit)

Python Example

Python
import os, requests
SH = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}

def find_qsr_ops(brand, market):
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=SH, json={'query': f'{brand} franchise owner {market}', 'country_code': 'us'}, timeout=10).json()
    for r in data.get('organic_results', [])[:3]:
        print(f'  {r.get("title", "")[:50]}')

find_qsr_ops('Subway', 'Dallas TX')
print('Cost: $0.005')

JavaScript Example

JavaScript
const SH = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
const data = await fetch('https://api.scavio.dev/api/v1/search', {
  method: 'POST', headers: SH,
  body: JSON.stringify({ query: 'Subway franchise owner Dallas TX', country_code: 'us' })
}).then(r => r.json());
(data.organic_results || []).slice(0, 3).forEach(r => console.log(r.title));

Expected Output

JSON
  Subway          in Dallas TX    | 14 results
  Subway          in Atlanta GA   | 12 results
  Chick-fil-A     in Dallas TX    | 10 results
  Wingstop        in Phoenix AZ   | 11 results

Total results: 108
Cost: $0.090

=== Results by Source ===
  linkedin             | 18 results
  trade_press          | 25 results
  franchise_docs       | 15 results

=== Multi-Unit Operator Mentions ===
  Found: 12 mentions
  [Subway] Dallas Franchise Group Operates 45 Subway Loc

=== QSR Operator Pipeline Summary ===
  Total results: 108
  Unique results: 82
  Multi-unit mentions: 12
  Cost: $0.090

Related Tutorials

  • How to Build Local SMB Discovery Without Apollo
  • How to Build Franchise Operator Enrichment Pipeline
  • How to Enrich Cold Email Targets for E-Commerce

Frequently Asked Questions

Most developers complete this tutorial in 15 to 30 minutes. You will need a Scavio API key (free tier works) and a working Python or JavaScript environment.

Python 3.8+. requests library. A Scavio API key from scavio.dev. Target QSR brands and markets. A Scavio API key gives you 50 free credits on signup.

Yes. The free tier includes 50 credits on signup, which is more than enough to complete this tutorial and prototype a working solution.

Scavio has a native LangChain package (langchain-scavio), an MCP server, and a plain REST API that works with any HTTP client. This tutorial uses the raw REST API, but you can adapt to your framework of choice.

Related Resources

Best Of

Best QSR Operator List Building Tools (2026)

Read more
Best Of

Best Franchise Discovery Data Tools (2026)

Read more
Use Case

QSR Franchise Operator Discovery

Read more
Glossary

Search API Provider Landscape (2026)

Read more
Use Case

Franchise Operator Outreach Pipeline

Read more
Glossary

Free Search API Tier Comparison

Read more

Start Building

Build a list of QSR franchise operators by location using search API. Discover owners, locations, and contact info at $0.005/query.

Get Free API KeyRead the Docs
ScavioScavio

Real-time search API for AI agents. Search every platform, not just Google.

Product

  • Features
  • Pricing
  • Dashboard
  • Affiliates

Developers

  • Documentation
  • API Reference
  • Quickstart
  • MCP Integration
  • Python SDK

Alternatives

  • Tavily Alternative
  • SerpAPI Alternative
  • Firecrawl Alternative
  • Exa Alternative

Tools

  • JSON Formatter
  • cURL to Code
  • Token Counter
  • All Tools

© 2026 Scavio. All rights reserved.

Featured on TAAFT
Terms of ServicePrivacy Policy