# OurDigital service rate card — single source for estimate.py # Mirrors the ourdigital-backoffice quote ranges. Values are KRW, treated as # pre-sales estimate RANGES (finalize after a precise diagnostic with access). quote_prefix: OD # quote number format: OD-YYYY-NNN currency: KRW services: technical_audit: label_ko: "Technical Audit / 기술 SEO 진단" unit: one_time # one_time | monthly | project min: 3000000 max: 5000000 technical_remediation: label_ko: "기술 개선 실행 (sitemap/CWV/SSR)" unit: project min: 3000000 max: 8000000 onpage_entity: label_ko: "On-Page / Entity Optimization (월 운영)" unit: monthly min: 1500000 max: 3000000 schema_build: label_ko: "구조화 데이터(Schema) 구축 (1회)" unit: one_time min: 2000000 max: 4000000 local_seo: label_ko: "Local SEO (프로퍼티 로컬 최적화)" unit: monthly min: 1000000 max: 2000000 gtm_setup: label_ko: "GTM Setup / 태그 관리 구축" unit: project min: 2000000 max: 4000000 ga4_impl: label_ko: "GA4 Implementation / 분석 환경 구축" unit: project min: 1500000 max: 3000000 dashboard: label_ko: "Dashboard Development / 대시보드 개발" unit: project min: 3000000 max: 6000000 defaults: retainer_months: 6 # default contract length for monthly line items disclaimer_ko: "본 견적은 공개 데이터 기반 사전 추정 범위이며, Search Console/Analytics 권한 확보 후 정밀 진단을 통해 확정됩니다." # Scope scaling — monthly line items scale (sub-linearly) by portfolio size. # driver: a count under findings.entity (properties_total | subbrands_total). # bands: ordered [max_count, multiplier]; first band whose max_count >= count wins. # A 25-property chain costs more to run than a single hotel, but not 25x. scaling: local_seo: driver: properties_total bands: [[1, 1.0], [5, 1.6], [15, 2.8], [30, 4.5], [999999, 6.5]] onpage_entity: driver: subbrands_total bands: [[1, 1.0], [3, 1.6], [6, 2.2], [999999, 3.2]]