Overview
The iPricing tool (part of the A-MINT service) transforms unstructured pricing pages into machine-readable Pricing2Yaml format. This enables H.A.R.V.E.Y. to perform rigorous analysis, validation, and optimization on any SaaS pricing model.How iPricing Works
The extraction pipeline follows these steps:LLM-Powered Extraction
The A-MINT service uses OpenAI models to analyze the webpage content and extract:
- Plan names and prices
- Features and their types (DOMAIN, INTEGRATION, SUPPORT)
- Usage limits (NUMERIC, BOOLEAN)
- Plan relationships and constraints
Validation
The generated YAML is validated against the schema and can be checked for mathematical consistency
Using iPricing via H.A.R.V.E.Y.
Automatic URL Detection
The easiest way to use iPricing is to include a URL directly in your question:- Detects the URL in your question
- Calls the
iPricingtool to extract the pricing model - Adds the extracted YAML to the conversation context
- Proceeds to answer your question using the structured data
Manual URL Addition
You can also add URLs manually through the control panel:Wait for transformation
The system displays a “pending” status while extracting. Once complete, it shows “done” with a ✓
Tool Invocation (MCP)
If you’re using H.A.R.V.E.Y. as an MCP client or calling the MCP server directly, theiPricing tool accepts the following parameters:
The URL of the SaaS pricing page to extract
Optional: Provide existing YAML content instead of fetching from URL
Force re-extraction even if the URL is cached
Response Format
The tool returns a JSON object with:Echo of the input parameters
The extracted Pricing2Yaml document as a YAML string
Indicates whether the YAML came from
amint (extraction) or upload (user-provided)Pricing2Yaml Format
The extracted YAML follows the Pricing2Yaml specification. Here’s an example structure:overleaf-extract.yaml
Schema Components
Metadata Fields
Metadata Fields
- saasName: Name of the SaaS product
- syntaxVersion: Pricing2Yaml spec version (currently
2.1) - version: Version identifier for this pricing model
- createdAt: Extraction timestamp
- currency: Price currency (USD, EUR, etc.)
Features
Features
Each feature has:
- description: Human-readable explanation
- valueType:
BOOLEAN,NUMERIC,TEXT - defaultValue: Base value (usually for free plan)
- type:
DOMAIN,INTEGRATION,SUPPORT,INFORMATION,MANAGEMENT,GUARANTEE,AUTOMATION,PAYMENT - integrationType (optional):
API,WEB_SAAS,IDENTITY_PROVIDER,EXTENSION
Usage Limits
Usage Limits
Quantifiable constraints:
- valueType:
NUMERICorBOOLEAN - defaultValue: Base limit
- unit: Measurement unit (users, requests, GB, etc.)
- type:
RENEWABLE,NON_RENEWABLE,TIME_DRIVEN,RESPONSE_DRIVEN - linkedFeatures: Features that depend on this limit
Plans
Plans
Each plan specifies:
- monthlyPrice: Price per month
- annualPrice: Price per month if billed annually
- unit: Pricing unit (usually
/month) - features: Override feature values for this plan
- usageLimits: Override limits for this plan
- price: Effective price (usually equals monthlyPrice)
Extraction Best Practices
Use Official Pricing Pages
Extract from the official SaaS vendor pricing page, not third-party comparison sites.
Check for Completeness
After extraction, review the YAML to ensure all plans and features were captured correctly.
Refresh Stale Data
Use
refresh: true to force re-extraction if pricing has changed since the last fetch.Validate After Extraction
Use the
validate tool to check the extracted model for mathematical consistency.Caching Behavior
The MCP server caches extracted pricing models by URL:- Default TTL: Configured via
CACHE_BACKENDand cache settings - Cache Key:
pricing:<url> - Bypass Cache: Set
refresh: truein the tool call
Caching reduces latency and API costs by avoiding redundant extractions. The cache is shared across all H.A.R.V.E.Y. sessions.
Configuration
The A-MINT service requires an OpenAI API key:docker-compose.yml
.env file:
.env
Troubleshooting Extraction
Incomplete Feature Extraction
Problem: Not all features or plans are extracted Solutions:- Verify the pricing page has clear, structured pricing tables
- Check if the page uses JavaScript rendering (may require Sphere integration)
- Manual review and editing of the YAML may be needed for complex layouts
Type Misclassification
Problem: Features are classified with incorrect types Solutions:- Review the generated YAML and manually correct types
- Update descriptions to provide clearer context for the LLM
- Use the Pricing2Yaml specification as a guide for correct classifications
Pricing Discrepancies
Problem: Extracted prices don’t match the website Solutions:- Check if the page shows region-specific pricing
- Verify the currency in the YAML matches the displayed currency
- Use
refresh: trueto re-extract in case of cached stale data
Network or API Errors
Problem: Extraction fails with timeout or API errors Solutions:- Check A-MINT service logs:
docker-compose logs a-mint-api - Verify OpenAI API key is valid and has available quota
- Ensure the target URL is publicly accessible
Programmatic Usage
If you’re calling the MCP server programmatically, here’s an example tool call:Next Steps
Optimization Queries
Learn how to find optimal plans using filters and constraints
Pricing Models
Deep dive into the complete Pricing2Yaml schema