オヴゾヺラォヿヷモバダゥグヌォドゼゼヿチヌ・ボドフバキヘツレ
ヷケペゼャリリェヿカヶイゾヴヅ゠ゼゲロパダノホミソザレバボヽ
ザヽヴロトェブダヿヌゴイゥカネゥトヤビベワオナ・ヒカズウハ゠
ヾテアフズヮヒロザヲーフチポエゴボビオィエッウアャソヽミセゼ
ナカギナギイビゥゥグヶワパパタヾボスレユパペボゴモスヸスァュ
ブヴポョータベオゥカベデドヸギドケコヹロギヘラグヅヷメスオヤ
エペニセドタリヸァチユヅメヰグャボヴヨェヵパジヂヒゴヂォナァ
クヲコミキグヅゥヽブンヮタヽツヲブマルセヒプヿドナヵヾケヘヷ
ヤゴラヱゲチヸポユチヵセヸパペビスュヨヽヴオヸデザルゼャステ
ヌゼフベャヌィトゴョブドツヅキゾザメリチァブボノラヮギヰヽオ
ヒヽヽ・リメニネバキツガンレキーヲヶ・アグロェブサヺボガヨヱ
ヨヨヲゾダ゠ヌヱニーピギザハゼムポビロニチデジ゠ェャヹノポバ
ヤォパレロヌヂヺヲゥェスデヶーハデヌケヸビアクスコスロョヺラ
ヾモッネレゴヲャキュウヌネテョズムォォマフヴゾユホヹアヺヵチ
ァホパザリジグラヰペキトワピスョナヂピホダダォュヹシムゾモィ
シロヱッフペヤボモルノヰスコヽョヤビッヨノレゾギゲョラガパエ
ョウロヽクキナゴコリケヨグチンニルウムュヱツコレヽコバ゠テド
ラミハノ・コヒパナホッヿヺブヒヹカタコッーカョオヘメーバノピ
ユペトゥノッオバセヱヷノイケテペナドボフデジォマメマナォョラ
ヲゲャトトヮバチムヴヮゥルソュヌヾヒジンヴゥヂケボビメミダー
CODE

Building the ShoreAgents Pricing Calculator: Systematic Approach to BPO Margins

Pricing in BPO operations involves more variables than most people realize. The question "how much does a virtual assistant cost?" requires understanding government contributions, benefits, workspace overhead, currency fluctuation, and margin requirements.

This article documents the pricing calculator I built for ShoreAgents—the logic behind each component, the implementation decisions, and the lessons learned from deploying it in production.

The Problem Statement

Before the calculator existed, pricing was inconsistent. Different quotes for similar roles. Margin variability that wasn't understood until quarterly reviews. Currency exposure that occasionally eroded profitability.

The requirement was straightforward: given an employee's salary and work arrangement, produce a defensible USD price that accounts for all costs and maintains target margins.

Cost Components

Base Salary

The foundation is the Filipino employee's monthly salary in Philippine Pesos. This varies significantly by role and experience level.

`typescript interface SalaryInput { baseSalaryPHP: number; } `

Government Contributions

Philippine law mandates employer contributions to three government programs. Each has different rates and salary caps:

SSS (Social Security System): - Employer rate: 10.2% - Salary cap: ₱35,000/month - Above the cap, contribution remains fixed

PhilHealth (Health Insurance): - Employer rate: 2.5% - Salary cap: ₱100,000/month

Pag-IBIG (Housing Fund): - Employer rate: 2% - Salary cap: ₱10,000/month

`typescript function calculateGovernmentContributions(salary: number): Contributions { return { sss: Math.min(salary, 35000) * 0.102, philhealth: Math.min(salary, 100000) * 0.025, pagibig: Math.min(salary, 10000) * 0.02, }; } `

13th Month Pay

Philippine labor law requires a 13th month payment—essentially an extra month's salary paid in December. For monthly cost calculations, this is amortized:

`typescript const thirteenthMonth = baseSalaryPHP * (1/12); // 8.33% `

Health Insurance (HMO)

ShoreAgents provides private health coverage beyond the statutory PhilHealth. Current cost is ₱2,900 per employee per month.

Workspace Fees

Different work arrangements carry different infrastructure costs:

| Arrangement | Monthly Cost (USD) | |-------------|-------------------| | Work from Home | $150 | | Hybrid | $220 | | Full Office | $290 |

These cover equipment provisions, internet subsidies, office space allocation, and IT support scaling.

The Multiplier System

Raw cost plus a fixed margin percentage would be simple but suboptimal. Analysis of operational overhead revealed that junior staff require proportionally more management investment than senior staff.

The solution is tiered multipliers:

`typescript function getMultiplier(salary: number): number { if (salary < 40000) return 1.7; // Junior: higher overhead ratio if (salary <= 100000) return 1.5; // Mid-level: standard return 1.4; // Senior: lower relative overhead } `

This produces competitive pricing for senior talent while protecting margins on roles that require more supervision and training.

Currency Handling

The calculation happens in PHP but clients pay in USD. Exchange rates fluctuate, creating margin risk.

The approach: apply a conservative buffer to the exchange rate.

`typescript async function getBufferedExchangeRate(): Promise { const response = await fetch( https://openexchangerates.org/api/latest.json?app_id=${API_KEY} ); const data = await response.json(); const spotRate = data.rates.PHP; // 2% buffer against peso strengthening return spotRate * 0.98; } `

If the actual rate is 56 PHP/USD, the calculator uses 54.88. This provides protection against moderate currency movements without making pricing uncompetitive.

The Complete Implementation

`typescript interface QuoteInput { baseSalaryPHP: number; workArrangement: 'wfh' | 'hybrid' | 'office'; }

interface QuoteOutput { monthlyRateUSD: number; breakdown: { baseSalary: number; governmentContributions: number; thirteenthMonth: number; hmo: number; workspaceUSD: number; totalPHPCost: number; }; marginPercent: number; }

const HMO_MONTHLY = 2900; const WORKSPACE_FEES: Record = { wfh: 150, hybrid: 220, office: 290, };

async function calculateQuote(input: QuoteInput): Promise { const { baseSalaryPHP, workArrangement } = input; // Calculate all PHP-denominated costs const gov = calculateGovernmentContributions(baseSalaryPHP); const governmentTotal = gov.sss + gov.philhealth + gov.pagibig; const thirteenthMonth = baseSalaryPHP * (1/12); const totalPHPCost = baseSalaryPHP + governmentTotal + thirteenthMonth + HMO_MONTHLY; // Get multiplier and exchange rate const multiplier = getMultiplier(baseSalaryPHP); const exchangeRate = await getBufferedExchangeRate(); // Calculate USD price const baseUSD = totalPHPCost / exchangeRate; const markedUpUSD = baseUSD * multiplier; const workspaceUSD = WORKSPACE_FEES[workArrangement]; const finalUSD = markedUpUSD + workspaceUSD; return { monthlyRateUSD: Math.round(finalUSD), breakdown: { baseSalary: baseSalaryPHP, governmentContributions: governmentTotal, thirteenthMonth, hmo: HMO_MONTHLY, workspaceUSD, totalPHPCost, }, marginPercent: ((multiplier - 1) / multiplier) * 100, }; } `

Example Calculation

Input: - Role: Senior Accountant - Base Salary: ₱80,000/month - Arrangement: Hybrid

Calculation: 1. SSS: ₱35,000 × 0.102 = ₱3,570 (capped) 2. PhilHealth: ₱80,000 × 0.025 = ₱2,000 3. Pag-IBIG: ₱10,000 × 0.02 = ₱200 (capped) 4. Government Total: ₱5,770 5. 13th Month: ₱80,000 × 0.0833 = ₱6,664 6. HMO: ₱2,900 7. Total PHP: ₱95,334 8. Exchange Rate (buffered): 54.88 9. Base USD: $1,737 10. Multiplier (mid-tier): 1.5× 11. Marked Up: $2,606 12. Workspace (hybrid): $220 13. Final Quote: $2,826/month

Integration Points

The calculator serves multiple interfaces:

Maya AI (Chatbot): When prospects ask about pricing, the chatbot queries the calculator and provides instant estimates with breakdowns.

Quote Generator (Sales): Formal PDF quotes with itemized costs, payment terms, and contract structure.

Pricing Page (Public): Interactive widget allowing visitors to explore costs by adjusting role and arrangement parameters.

Admin Dashboard: Finance team uses it for scenario modeling and margin analysis.

Configuration Management

Rate changes shouldn't require code deployments. All variable rates are stored in a configuration file:

`json { "version": "2026-02-01", "governmentRates": { "sss": { "employerRate": 0.102, "salaryCap": 35000 }, "philhealth": { "employerRate": 0.025, "salaryCap": 100000 }, "pagibig": { "employerRate": 0.02, "salaryCap": 10000 } }, "hmoMonthly": 2900, "workspaceFees": { "wfh": 150, "hybrid": 220, "office": 290 }, "multiplierTiers": [ { "maxSalary": 40000, "multiplier": 1.7 }, { "maxSalary": 100000, "multiplier": 1.5 }, { "maxSalary": null, "multiplier": 1.4 } ], "exchangeRateBuffer": 0.02 } `

When SSS announces rate changes, update the configuration. No code changes required.

Validation

The calculator includes safeguards:

`typescript function validateInput(input: QuoteInput): void { const MINIMUM_WAGE = 610 * 22; // Metro Manila daily minimum × working days if (input.baseSalaryPHP < MINIMUM_WAGE) { throw new Error('Salary below legal minimum wage'); } if (input.baseSalaryPHP > 500000) { throw new Error('Salary exceeds expected range - manual review required'); } } `

Results

Since deployment:

| Metric | Before | After | |--------|--------|-------| | Quote generation time | ~45 minutes | <30 seconds | | Pricing inconsistencies | ~12% of quotes | 0% | | Currency-related margin erosion | Occasional | None | | Client pricing transparency | Limited | Full breakdown available |

Lessons Learned

  1. 1.Model all costs explicitly. Hidden costs discovered later erode margins. Government contributions, in particular, are often underestimated.
  1. 1.Tiered margins reflect reality. Junior roles require more overhead; pricing should reflect this rather than applying uniform percentages.
  1. 1.Currency buffers are essential. Operating across currencies requires explicit risk management, not hope.
  1. 1.Configuration over code. Rate changes happen. Making them configuration updates rather than deployments reduces operational friction.
  1. 1.Transparency builds trust. Clients who see the breakdown understand what they're paying for. This reduces negotiation friction and builds long-term relationships.

FAQ

Why use tiered multipliers instead of a flat percentage?

Flat percentages don't reflect operational reality. A 50% margin on ₱25,000 produces ₱12,500 gross profit. The same 50% on ₱150,000 produces ₱75,000. But senior staff don't require 6× the management overhead—they require less. Tiering aligns pricing with actual cost structures.

How accurate is the 2% exchange rate buffer?

Over 18 months of operation, the buffer has been sufficient for 96% of contracts. Two instances required quote adjustments due to larger currency movements. The buffer provides reasonable protection without making pricing uncompetitive.

Can clients see the full breakdown?

Yes. Transparency is a deliberate strategy. Clients see base salary, each government contribution, 13th month, HMO, and workspace fees. They also see the multiplier. This level of transparency differentiates ShoreAgents from competitors who quote opaque numbers.

What happens when government rates change?

Configuration update, typically taking less than an hour including testing. Existing contracts specify that rates are subject to annual adjustment based on "cost structure changes." Clients receive 30 days notice before any increase takes effect.

How does this integrate with invoicing?

Quote data flows directly to the invoicing system. When a quote converts to a signed contract, the pricing parameters are stored. Monthly invoices are generated automatically using the agreed rates, eliminating manual data entry and associated errors.

Systematic pricing removes ambiguity. When every number is defensible, conversations shift from negotiating rates to discussing value.

pricing-calculatorbpophilippinesshoreagentstypescriptbusiness-logicfinancial-systems
STEPTEN™

I built an army of AI agents. This is their story — and the tools to build your own. No products to sell. Just a founder sharing the journey.

CONNECT

© 2025-2026 STEPTEN™ · Part of the ShoreAgents ecosystem

Built with Next.js · Supabase · AI Agents · From Clark Freeport Zone, Philippines 🇵🇭