Marketplaces

Marketplaces and platforms face unique verification challenges focused on merchant quality, credibility, and customer trust. Unlike regulated financial institutions, marketplaces prioritize evaluating the legitimacy and reputation of vendors to protect buyers and maintain platform integrity. Vendor verification directly impacts customer confidence and platform reputation.

Key challenges for marketplaces:

  • Credibility assessment: Verifying vendors have authentic online presence and positive reputation
  • Quality control: Ensuring vendors can deliver on promises with established track records
  • Fraud prevention: Detecting fake businesses or vendors with histories of non-delivery
  • Scale and speed: Onboarding legitimate vendors quickly while filtering out bad actors

This guide provides a standard verification workflow optimized for marketplace and platform onboarding teams.


Verification Workflow Overview

A typical marketplace business verification flow includes four key stages:

  1. Fraud Screening: Detect known fraud patterns and consortium intelligence (Baselayer + Partner/s)
  2. Industry & Online Review: Evaluate business credibility through online presence, reviews, and industry type (Baselayer)
  3. Business Verification: Validate business identity and registration status (Baselayer)
  4. Individual Verification: Verify the business owner or principal (Partner/s)

Each stage uses a combination of Baselayer endpoints and third-party verification tools to build a complete credibility picture.


Step 1: Fraud Screening

Purpose: Identify fraudulent vendors early by checking fraud consortium intelligence and device/identity signals.

Required Tools

  • Fraud screening provider (for device/identity signals and digital intelligence)
  • Baselayer: Fraud consortium

Baselayer Endpoints

POST /searches

Note: Baselayer is developing a standalone fraud check product launching in Q1 2026 that will streamline this step. The current approach uses the business search endpoint.

Verification Logic

// Submit business search
response = POST /searches with business details

// Check fraud consortium
IF COUNT(response.fraud_consortium_hits) > 0:
    flag = "RED"
    reason = "Business or individual in Baselayer Fraud Consortium"

// Combine with third-party fraud screening
IF fraud_screening_provider.risk_score > threshold:
    flag = "RED"
    reason = "Failed fraud screening"

Note: Baselayer fraud consortium is only available for member entities who contribute regularly to the fraud database.

Context

Fraud screening for marketplaces focuses on catching repeat offenders and known bad actors. Unlike payment processors and others, marketplaces typically do not need application velocity tracking since vendor re-applications are less common.


Step 2: Industry & Web Review

Purpose: Evaluate vendor credibility through online presence, customer reviews, social media activity, and industry assessment.

Required Tools

  • Baselayer: Industry prediction, website analysis, social media & reviews

Baselayer Endpoints

POST /web_presence_requests

Tip: The web presence request has 20-30 second latency. Consider initiating this request early in your workflow (e.g., during Step 1) to improve vendor experience.

Verification Logic

Contact Details Verification

// Extract contact match signals from top-level /web_presence_requests response
email_match = response.email_match  // EXACT, DOMAIN, NO_MATCH, or null
email_match_sources = response.email_match_sources
phone_number_match = response.phone_number_match  // EXACT, AREA_CODE, NO_MATCH, or null
phone_number_match_sources = response.phone_number_match_sources
business_address_match = response.business_address_match  // EXACT, SIMILAR, CITY, STATE, NO_MATCH, or null
business_address_match_sources = response.business_address_match_sources
business_website_match = response.business_website_match  // boolean or null
business_website_match_sources = response.business_website_match_sources

// Define valid sources (excludes INPUT_WEBSITE since that's not independent validation)
valid_sources = ["FOUND_WEBSITE", "SOCIAL_PROFILE", "REVIEW"]

// Check email validation
IF email_match IS NOT NULL:
    IF email_match == "NO_MATCH":
        flag = "YELLOW"
        reason = "Submitted email not found in any online sources"
    ELSE IF email_match IN ["EXACT", "DOMAIN"]:
        IF NOT ANY(valid_sources IN email_match_sources):
            flag = "YELLOW"
            reason = "Email only found on submitted website, not independently validated"

// Check phone number validation
IF phone_number_match IS NOT NULL:
    IF phone_number_match == "NO_MATCH":
        flag = "YELLOW"
        reason = "Submitted phone number not found in any online sources"
    ELSE IF phone_number_match IN ["EXACT", "AREA_CODE"]:
        IF NOT ANY(valid_sources IN phone_number_match_sources):
            flag = "YELLOW"
            reason = "Phone number only found on submitted website, not independently validated"

// Check address validation
IF business_address_match IS NOT NULL:
    IF business_address_match == "NO_MATCH":
        flag = "YELLOW"
        reason = "Submitted address not found in any online sources"
    ELSE IF business_address_match IN ["EXACT", "SIMILAR", "CITY", "STATE"]:
        IF NOT ANY(valid_sources IN business_address_match_sources):
            flag = "YELLOW"
            reason = "Address only found on submitted website, not independently validated"

// Check website validation
IF business_website_match IS NOT NULL:
    IF business_website_match == FALSE:
        flag = "YELLOW"
        reason = "Submitted website not found in online presence"
    ELSE IF business_website_match == TRUE:
        IF NOT ANY(valid_sources IN business_website_match_sources):
            flag = "YELLOW"
            reason = "Website only found as input, not independently validated"

Note: The *_match fields return different match levels: email (EXACT/DOMAIN/NO_MATCH), phone (EXACT/AREA_CODE/NO_MATCH), address (EXACT/SIMILAR/CITY/STATE/NO_MATCH), and website (TRUE/FALSE). These fields will be null if no input was submitted. Matches that ONLY appear in INPUT_WEBSITE are flagged as not independently validated, since this only confirms the information appears on the website the applicant provided, not that it's been verified through independent sources like discovered websites, social profiles, or review platforms.

Industry Screening

// Extract industry prediction from /web_presence_requests response
industry = response.industry_prediction

// Check for high-risk or prohibited industries
IF industry.keywords CONTAINS ANY high_risk_keyword:
    flag = "YELLOW"
    reason = "High-risk industry keyword detected"

// Check high-risk NAICS codes with confidence threshold
IF industry.code IN prohibited_naics_list:
    IF industry.accuracy >= 0.75:
        flag = "RED"
        reason = "Prohibited industry with high confidence"
    ELSE:
        flag = "YELLOW"
        reason = "Potential prohibited industry, needs review"

Note: High-risk keyword and NAICS code lists are proprietary and available to Baselayer customers upon request. Marketplaces typically focus on product category restrictions (e.g., weapons, illegal substances) rather than financial risk. Contact your account representative for access.

Website Analysis

// Retrieve website analysis from /web_presence_requests response
website = response.website_analysis

// Check for website presence
IF website.url == NULL:
    IF months_in_business >= 6:
        flag = "YELLOW"
        reason = "No website found for established business"
    ELSE:
        flag = "PASS"
        reason = "Acceptable for new business"

// Verify email domain matches website
IF website.url IS NOT NULL AND email_deliverable == TRUE:
    submitted_email_domain = EXTRACT_DOMAIN(application.email)
    
    IF submitted_email_domain != website.url:
        flag = "RED"
        reason = "Email domain does not match business website"

Note: Additional website quality indicators can be found in our Online Presence: Best Practices guide.

Social Media & Reviews

// Retrieve social and review data from /web_presence_requests response
social_profiles = response.found_social_profiles  // array of objects
reviews = response.found_reviews  // array of objects

// Filter for high-confidence results only
high_confidence_profiles = FILTER(social_profiles WHERE confidence == "high")
high_confidence_reviews = FILTER(reviews WHERE confidence == "high")

// Check review quality
FOR EACH review_source IN high_confidence_reviews:
    // Basic quality threshold
    IF review_source.volume > 20 AND review_source.rating < 3.0:
        flag = "RED"
        reason = "Poor review rating with sufficient review volume"
    
    // Check review sentiment summary
    IF review_source.summary CONTAINS ["scam", "fraud", "non-delivery", "fake", "never received"]:
        flag = "YELLOW"
        reason = "Review summary indicates negative fraud/delivery patterns"

// Check social media presence for established businesses
IF months_in_business >= 12:
    IF COUNT(high_confidence_profiles) == 0:
        flag = "YELLOW"
        reason = "No high-confidence social media presence for established business"

Note: Social media and review criteria are highly specific to each marketplace category and vendor base. The logic above provides a starting framework. For extended best practices on online presence evaluation, see Online Presence: Best Practices.

Context

Industry and web review is the most critical step for marketplaces. Unlike financial institutions focused on regulatory compliance, marketplaces must evaluate vendor credibility and customer satisfaction. Strong online presence, positive reviews, and authentic social media activity are key indicators of legitimate, quality vendors.


Step 3: Business Verification

Purpose: Validate business identity and registration status. Note that sole proprietorships are very common for marketplace vendors.

Required Tools

  • Baselayer: Business search

Baselayer Endpoints

POST /searches

Tip: You can re-use the API response from the POST /searches request from Step 1 and avoid extra charges.

Verification Logic

This workflow assumes only registered businesses are approved. If sole proprietorships are also able to use the product, we recommend setting up a separate route as explained in our Sole Prop Verification guide.

// Extract match signals from /searches response
business_id = response.business.id
name_match = response.business_name_match
address_match = response.business_address_match  
tin_matched = response.tin_matched
registrations = response.business.registrations
watchlist_hits = response.watchlist_hits

// Check Baselayer match

IF business_id == NULL:
    flag = "RED"
    reason = "No business match" // skip all other steps

// Check name and address matching
name_address_approved = FALSE

IF name_match == "EXACT" AND address_match IN ["EXACT", "CITY", "STATE"]:
    name_address_approved = TRUE
    
ELSE IF name_match == "SIMILAR" AND address_match == "EXACT":
    name_address_approved = TRUE

IF NOT name_address_approved:
    flag = "RED"
    reason = "Weak name/address match"

// Verify TIN - some marketplaces do not request EIN during onboarding, in that case tin_matched == NULL
IF tin_matched == NULL:
    # IRS outage - handle per policy
    # See [IRS Outage Handling Guide](#) for detailed guidance
    flag = "YELLOW"
    reason = "TIN verification unavailable (IRS outage)"
    
ELSE IF tin_match == FALSE:
    flag = "RED"
    reason = "TIN does not match business name"

// Check registrations
domestic_active = FALSE
FOR EACH registration IN registrations:
    IF registration.type == "domestic" AND registration.status == "active":
        domestic_active = TRUE
        domestic_state = registration.state

IF NOT domestic_active:
    flag = "RED"
    reason = "No active domestic registration"

// If business operates in different state, verify foreign registration. 
// Operating state is usually the one from the application address - you can use operating_state == response.search_address.state
IF operating_state != domestic_state:
    foreign_active = FALSE
    FOR EACH registration IN registrations:
        IF registration.type == "foreign" AND registration.state == operating_state AND registration.status == "active":
            foreign_active = TRUE
    
    IF NOT foreign_active:
        flag = "YELLOW"
        reason = "No active foreign registration in operating state"

// Check watchlists
IF COUNT(watchlist_hits) > 0:
    flag = "RED"
    reason = "Positive sanctions or watchlist match"

Note: Marketplaces commonly onboard sole proprietors who will not have Secretary of State registrations. Route these applications to a sole proprietor verification workflow. See Sole Prop Verification guide for detailed steps.

Context

Business verification for marketplaces is more flexible than for financial institutions. Many legitimate vendors operate as sole proprietors without formal registrations. The verification logic should accommodate both registered entities and sole proprietors while maintaining fraud controls.


Step 4: Individual Verification

Purpose: Verify the identity and compliance status of the vendor owner or principal.

Required Tools

  • KYC provider (for identity verification)
  • Identity verification provider (optional, for additional identity checks)

Context

Individual verification ensures the person registering as a vendor is legitimate and can be held accountable. Unlike financial institutions, marketplaces typically do not require AML screening unless explicitly required by their business model (e.g., high-value goods, international transactions).

Baselayer works with hundreds of partners and can recommend ideal providers for every product and case.


Implementation Checklist

Use this checklist to implement the marketplace verification workflow:

Setup

  • Integrate fraud screening provider
  • Integrate Baselayer API
  • Integrate KYC/identity verification provider
  • Request industry restriction lists from Baselayer representative
  • Define minimum review thresholds for your marketplace category
  • Set up sole proprietor verification route

Step 1: Fraud

  • Implement POST /searches endpoint
  • Configure fraud consortium check (if member)
  • Integrate third-party fraud screening

Step 2: Industry & Web Review

  • Implement POST /web_presence_requests endpoint
  • Configure industry screening logic for prohibited categories
  • Implement website analysis checks
  • Configure social media verification logic
  • Implement review quality and pattern checks
  • Define review rating thresholds

Step 3: Business

  • Implement standard KYB verification logic
  • Set up sole proprietor routing logic

Step 4: Individual

  • Implement identity verification check
  • Configure manual review queues
  • Set up rejection workflows

For questions about implementation or to request industry restriction lists, contact your Baselayer account representative.