Use Case

Agency Guide: Scaling 20+ Sites with SiteLocaleAI Licensing

Published August 28, 2026

Agency Guide: Scaling 20+ Sites with SiteLocaleAI Licensing

Agency Guide: Scaling 20+ Sites with SiteLocaleAI Licensing

Managing a portfolio of 20+ client websites can quickly become a logistical nightmare—especially when each site needs multilingual content, localized pricing, and SEO‑friendly rendering. SiteLocaleAI solves these challenges with a drop‑in JavaScript library, self‑hosted LLM integration, price rounding per currency, and a CLI for SEO pre‑rendering. This tutorial walks you through setting up a volume‑licensing workflow that lets your agency serve every client from a single codebase while keeping costs predictable.


1. Why Choose SiteLocaleAI for an Agency?

  • Framework‑agnostic – Works with React, Vue, WordPress, Shopify, or any static site generator.
  • Self‑hosted LLM keys – Use your own Claude, GPT‑4o‑mini, or other API keys, keeping data private and pricing under control.
  • Psychological price rounding – Automatically converts USD prices to local currencies with shopper‑friendly rounding (e.g., €9.99 → €9.95).
  • SEO‑ready pre‑rendering – The CLI generates static, fully translated HTML that search engines can index without JavaScript execution.
  • Volume licensing – One license covers all client sites, simplifying billing and compliance.

2. Setting Up a Central Repository

Create a mono‑repo that houses the SiteLocaleAI library and shared configuration. This approach lets you push updates to every client site with a single git push.

# Initialize a new Git repo
mkdir agency-site-locale && cd agency-site-locale
git init

# Add SiteLocaleAI as a submodule (or npm package)
npm i @sitelocaleai/core

Tip: Keep the sitelocale.config.json file at the repo root. It will be read by both the client‑side script and the CLI.


3. Configuring Volume Licensing

SiteLocaleAI supports a license key that unlocks unlimited translations across domains. Request a volume key from your account dashboard and store it securely.

// sitelocale.config.json
{
  "licenseKey": "YOUR_VOLUME_LICENSE_KEY",
  "defaultLanguage": "en",
  "supportedLanguages": ["en", "es", "fr", "de", "ja"],
  "priceRounding": {
    "USD": "0.99",
    "EUR": "0.95",
    "JPY": "0"
  },
  "llm": {
    "provider": "openai",
    "apiKey": "YOUR_OPENAI_API_KEY",
    "model": "gpt-4o-mini"
  }
}

The same file is used by the client‑side initialization and the CLI for pre‑rendering, guaranteeing consistent behavior across all client sites.


4. Adding the Drop‑in Script to Any Site

Because SiteLocaleAI is framework‑agnostic, you only need to embed a small script tag. The script reads the global sitelocaleConfig object, which you can generate at build time.

<!-- In the <head> of each client site -->
<script>
  window.sitelocaleConfig = {
    licenseKey: "YOUR_VOLUME_LICENSE_KEY",
    defaultLanguage: "en",
    supportedLanguages: ["en","es","fr","de","ja"],
    priceRounding: { USD: "0.99", EUR: "0.95", JPY: "0" },
    llm: { provider: "openai", apiKey: "YOUR_OPENAI_API_KEY", model: "gpt-4o-mini" }
  };
</script>
<script src="https://cdn.sitelocaleai.com/v1/sitelocale.min.js"></script>
<script>
  // Initialize after the library loads
  SiteLocale.init(window.sitelocaleConfig);
</script>

For WordPress sites, you can use the SiteLocaleAI plugin to inject the same snippet automatically—no Node.js required.


5. Localizing Prices with Psychological Rounding

SiteLocaleAI exposes a helper localizePrice(amount, currency) that applies the rounding rules defined in the config.

// Example: product page script
import { localizePrice } from "@sitelocaleai/core";

const priceUSD = 19.99; // base price in USD
const userCurrency = SiteLocale.getUserCurrency(); // e.g., "EUR"

const localized = localizePrice(priceUSD, userCurrency);

document.getElementById("price").textContent = `${localized.currency} ${localized.amount}`;

The function automatically converts using up‑to‑date exchange rates (fetched from the LLM provider) and applies the psychological rounding (e.g., €19.95 instead of €19.99).


6. SEO Pre‑Rendering with the CLI

Search engines struggle with client‑side translation. SiteLocaleAI’s CLI solves this by generating static HTML for every language version, which you can serve directly from your CDN.

# Install the CLI globally (once per agency machine)
npm i -g @sitelocaleai/cli

# Run pre‑rendering for all client sites
sitelocale-cli render \
  --config ./sitelocale.config.json \
  --output ./dist \
  --sites ./sites-list.txt

sites-list.txt contains one URL per line, e.g.,

https://client1.com
https://client2.com
…

The CLI will:
1. Crawl each URL.
2. Call the configured LLM to translate visible text.
3. Replace price elements with localized values.
4. Write language‑specific HTML files (/es/index.html, /fr/index.html, …) into ./dist.

You can then push ./dist to a static host (Netlify, Vercel, Cloudflare Pages) and configure a language‑aware routing rule.


7. Automating Deployments

Tie the CLI into your CI/CD pipeline so every code change triggers a fresh SEO pre‑render.

# .github/workflows/locale.yml
name: Locale Build
on:
  push:
    branches: [main]
jobs:
  render:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Install CLI
        run: npm i -g @sitelocaleai/cli
      - name: Render locales
        run: |
          sitelocale-cli render \
            --config ./sitelocale.config.json \
            --output ./dist \
            --sites ./sites-list.txt
      - name: Deploy to Netlify
        uses: nwtgck/actions-netlify@v1.2
        with:
          publish-dir: ./dist
          production-branch: main
          github-token: ${{ secrets.GITHUB_TOKEN }}
          netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }}
          netlify-site-id: ${{ secrets.NETLIFY_SITE_ID }}

Now every push automatically updates all translated pages, keeping SEO fresh across all client domains.


8. Monitoring Usage & Costs

Because you provide the LLM API keys, you can monitor token consumption per client using the provider’s dashboard. SiteLocaleAI logs each request with a clientId tag (set in the sitelocale.config.json if you need per‑client granularity).

// Example per‑client override
{
  "clientId": "client‑42",
  "licenseKey": "YOUR_VOLUME_LICENSE_KEY",
  "llm": { "apiKey": "CLIENT_42_OPENAI_KEY" }
}

This lets you bill clients based on actual usage while still benefiting from the volume‑license discount.


9. Internal Resources


10. Get Started Today

With a single license, your agency can deliver fast, accurate translations, localized pricing, and SEO‑ready pages for every client site—all while keeping costs transparent and under control. Try SiteLocaleAI now and see how easy multilingual scaling can be.