DataForSEO Credit Conversion Rate and Markup in OpenSEO: A Technical Breakdown
OpenSEO applies a 28% markup to raw DataForSEO costs and converts the final USD amount to platform credits at a fixed rate of 1,000 credits per dollar (1 credit = $0.001).
OpenSEO monetizes third-party DataForSEO service requests through a transparent credit-based billing system. The platform transforms raw API costs into customer-facing credit charges using two core financial constants defined in the every-app/open-seo source code. This article examines the exact credit conversion rate and markup percentage implemented throughout the billing infrastructure.
Credit-to-USD Conversion Rate
The 1000 Credits Per Dollar Standard
The foundation of OpenSEO's billing model rests on the constant AUTUMN_SEO_DATA_CREDITS_PER_USD defined in src/shared/billing.ts. This value establishes the exchange rate at 1,000 credits = $1.00, meaning each individual credit represents exactly $0.001.
This ratio appears throughout the pricing calculator in web/src/routes/_marketing/pricing.tsx as the constant CREDIT_USD = 0.001, serving as the inverse conversion factor for displaying costs to users.
Platform Markup Percentage
The 28% Markup on Raw DataForSEO Costs
Before converting to credits, OpenSEO applies a 28% markup to all raw DataForSEO costs. The source code implements this via the SEO_DATA_COST_MARKUP multiplier set to 1.28 in src/shared/billing.ts.
This markup ensures the platform covers operational overhead while maintaining transparent pricing. The multiplier is applied to raw costs before credit conversion, meaning users pay 128% of the base DataForSEO price.
Implementation in the Codebase
Core Billing Constants in src/shared/billing.ts
The file src/shared/billing.ts houses the primary constants and utility functions governing the pricing model. The applyBillingMarkupUsd() function applies the 28% markup and rounds to five decimal places, while autumnSeoDataCreditsToUsd() provides the inverse calculation for credit-to-dollar conversions.
// src/shared/billing.ts
export const AUTUMN_SEO_DATA_CREDITS_PER_USD = 1000; // 1 credit = $0.001
export const SEO_DATA_COST_MARKUP = 1.28; // 28% markup
/** Convert raw DataForSEO USD cost → final USD bill (rounded to 5 decimals) */
export function applyBillingMarkupUsd(rawUsd: number): number {
return roundUsdForBilling(rawUsd * SEO_DATA_COST_MARKUP);
}
/** Turn a credit count back into USD (inverse of the credit-to-USD rate) */
export function autumnSeoDataCreditsToUsd(credits: number) {
return credits / AUTUMN_SEO_DATA_CREDITS_PER_USD;
}
Frontend Pricing Calculator in pricing.tsx
The marketing site's pricing estimator at web/src/routes/_marketing/pricing.tsx mirrors these constants to display real-time cost estimates. The creditsForRaw() function demonstrates the complete calculation pipeline: raw cost × 1.28 markup → rounded USD → multiplied by 1,000 for final credit count.
// web/src/routes/_marketing/pricing.tsx
const MARKUP = 1.28; // matches SEO_DATA_COST_MARKUP
const CREDIT_USD = 0.001; // 1 credit = $0.001 (inverse of AUTUMN_SEO_DATA_CREDITS_PER_USD)
function creditsForRaw(rawUsd: number): number {
const billedUsd = Math.round(rawUsd * MARKUP * 100_000) / 100_000;
return Math.ceil(billedUsd * 1000); // 1 USD = 1,000 credits
}
Practical Calculation Example
When a user initiates a DataForSEO request, OpenSEO executes a two-step transformation:
- Markup Application: The raw DataForSEO cost is multiplied by
1.28usingapplyBillingMarkupUsd(), then rounded to five decimal places. - Credit Conversion: The resulting USD amount is converted to credits by multiplying by 1,000 and rounding to the nearest whole credit.
For example, a $10.00 raw DataForSEO request becomes $12.80 after the 28% markup, then converts to 12,800 credits at the 1,000-credits-per-dollar rate.
Summary
- OpenSEO charges 1,000 credits per US dollar, making each credit worth exactly $0.001 as defined by
AUTUMN_SEO_DATA_CREDITS_PER_USD. - A 28% markup (multiplier of 1.28) is applied to all raw DataForSEO costs via
SEO_DATA_COST_MARKUPbefore credit conversion. - The core billing logic resides in
src/shared/billing.ts, while the frontend estimator atweb/src/routes/_marketing/pricing.tsximplements identical calculations for user-facing price displays. - Final credit amounts are always rounded to whole numbers using
Math.ceil()or equivalent rounding utilities. - The
applyBillingMarkupUsd()function handles the markup calculation, whileautumnSeoDataCreditsToUsd()provides the inverse conversion for refund or display purposes.
Frequently Asked Questions
What is the exact value of one OpenSEO credit in USD?
One credit equals exactly $0.001 (one-tenth of a cent). This ratio is defined by the constant AUTUMN_SEO_DATA_CREDITS_PER_USD = 1000 in src/shared/billing.ts, establishing a fixed exchange rate of 1,000 credits per US dollar.
How does OpenSEO calculate the final cost of a DataForSEO request?
First, the platform applies the SEO_DATA_COST_MARKUP multiplier of 1.28 to the raw DataForSEO cost using the applyBillingMarkupUsd() function. Then it converts the marked-up USD amount to credits at the rate of 1,000 credits per dollar, rounding the result to the nearest whole credit.
Where can I find the markup percentage in the OpenSEO source code?
The 28% markup is defined as SEO_DATA_COST_MARKUP = 1.28 in src/shared/billing.ts. The same value appears as the constant MARKUP = 1.28 in web/src/routes/_marketing/pricing.tsx for the frontend pricing calculator.
Does OpenSEO round credit charges during conversion?
Yes. After applying the 28% markup, the USD amount is rounded to five decimal places via roundUsdForBilling(). When converting to credits, the system rounds to the nearest whole credit using Math.ceil() in the frontend or equivalent rounding logic in the billing utilities, ensuring users are never charged fractional credits.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →