跳到主要内容

7 篇博文 含有标签「会计软件」

查看所有标签

Beancount v3:有哪些新变化?

· 阅读需 5 分钟
Mike Thrift
Mike Thrift
Marketing Manager

Beancount 版本 3 于 2024 年年中发布,标志着这款流行的纯文本会计工具在架构上的重大演进。尽管它保持了用户账本文件的向后兼容性,但其底层结构和配套工具都经历了实质性变化。以下是 Beancount v3 的新特性一览。

更模块化、更精简的架构

Beancount v3:有哪些新变化?

Beancount v3 最显著的变化是转向了更模块化的生态系统。以前与核心捆绑在一起的几个关键功能已被拆分到独立的、独立的项目中。这使得 Beancount 的核心更加精简,并允许对各个组件进行更集中的开发。

现在作为独立包的关键组件包括:

  • beanquery:用于账本文件的强大类 SQL 查询工具现在已成为一个独立的包。
  • beangulp:这是数据导入框架的新家,取代了之前的 beancount.ingest 模块。
  • beanprice:一个专门用于获取商品和股票价格的工具。

这种分离意味着用户除了安装 beancount 本身之外,还需要安装这些独立的包,以保留他们在版本 2 中习惯的全部功能。

命令行工具和工作流程的变化

为了反映新的模块化架构,命令行工具发生了一些显著变化:

  • bean-report 已移除:此工具已被移除。现在鼓励用户使用 bean-query(来自 beanquery 包)来满足其报告需求。
  • 新的导入器工作流程bean-extractbean-identify 命令已从核心中移除。beangulp 的新方法是基于脚本的。用户现在将创建自己的 Python 脚本来处理从银行对账单等外部来源导入数据。

语法和功能增强

虽然核心会计原则保持不变,但 Beancount v3 在其语法中引入了一些受欢迎的灵活性:

  • 更灵活的货币代码:以前对货币名称长度和字符的限制已放宽。现在支持单字符货币符号。
  • 扩展的交易标志:用户现在可以使用 A 到 Z 的任何大写字母作为交易的标志,从而实现更精细的分类。

重要的是,这些更改是向后兼容的,因此你现有的 Beancount v2 账本文件无需任何修改即可使用。

C++ 重写与性能

Beancount 的长期目标之一是使用 C++ 重写其性能关键组件。虽然这项工作仍在进行中,但 Beancount v3 的初始版本包含基于 C++ 的核心。这意味着目前 v3 的性能与 v2 相当。C++ 代码仍保留在单独的开发分支中,以供将来集成。

从 v2 迁移到 v3

对于大多数用户而言,从 Beancount v2 迁移到 v3 相对简单:

  1. 账本文件:你的 .beancount 文件无需任何更改。
  2. 安装:你需要使用 pip 安装新的独立包,例如 beanquerybeangulp
  3. 导入器脚本:如果你有自定义导入器,则需要更新它们以使用新的 beangulp API。这主要涉及更改导入器继承的基类并调整一些方法签名。
  4. Fava:Beancount 流行的网页界面 Fava 已更新以兼容 v3。请确保你拥有最新版本的 Fava 以获得无缝体验。

本质上,Beancount v3 是一个基础版本,它简化了项目的架构,使其在长期内更具模块化,更易于维护和扩展。虽然它需要对用户工作流程进行一些调整,尤其是在数据导入方面,但它为这款强大的会计工具的未来发展奠定了基础。

深入分析 Pilot 和主要会计软件的盈利模式

· 阅读需 47 分钟
Mike Thrift
Mike Thrift
Marketing Manager

作为 beancount.io 的首席执行官,了解行业领导者 Pilot 以及 QuickBooksXeroBenchWave 等主要会计软件/服务的业务盈利模式对于战略制定至关重要。本报告将从定价方法、客户类型、收入来源、产品定位与差异化、渠道策略与市场覆盖等方面分析这些公司的业务模式。它将特别剖析 Pilot 的模式和优势,并最终提供一份供应商比较表。

Pilot:商业模式与独特优势

2025-05-30-analysis-of-major-accounting-software

定价模式与收入来源: Pilot 提供在线财务记账服务,采用年度订阅模式,根据客户公司的月度支出规模和所需服务范围进行分级定价。基础记账服务此前起价约为每月 499 美元(适用于月度支出低于 15,000 美元的企业)。(注:自 2025 年起,Pilot 推出了价格更低的“Essentials”基础套餐,起价每月 199 美元,以满足微型和小型企业的基本记账需求。) Pilot 的主要收入来自订阅费,客户支付固定的月度/年度费用以获得持续的记账服务。此外,Pilot 还通过增值金融服务产生额外收入,例如企业所得税申报服务(按年计费)和首席财务官 (CFO) 咨询服务(按月计费)。Pilot 不直接提供自己的薪资功能,而是专注于记账和报税等核心财务服务。

客户类型与产品定位: Pilot 成立于 2017 年,** 专注于服务初创企业和中小型企业 (SMEs),尤其是高增长科技初创企业**。它将自己定位为小型企业的“一站式财务后台”,不仅提供专业的记账服务,还提供高级财务顾问 (CFO) 支持,甚至包括研发税收抵免申请等专业服务。Pilot 从一开始就强调使用权责发生制会计(而非收付实现制),确保快速增长的公司能够随时满足投资者和合规要求,而无需在未来进行痛苦的转换。这使得 Pilot 特别适合有融资需求和业务复杂性迅速增加的公司。Pilot 还利用专有软件和人工智能来提高效率和准确性。例如,2023 年,Pilot 推出了“Pilot GPT”功能,将 OpenAI 的生成式 AI 整合到会计流程中,以提高记账准确性并提供更深入的财务洞察。Pilot 表示,通过结合AI 软件与经验丰富的会计团队,它服务了超过 1,700 家快速增长的客户,为小型公司提供了“大公司级别”的财务分析能力。这种**“人机协作”**模式不仅减少了手动数据录入等重复性任务,还使会计师能够将更多时间投入到高级财务管理和咨询中。

差异化优势: 与传统会计软件不同,Pilot 提供全托管记账。用户无需自己使用会计软件;相反,他们将整个财务记账职能外包给 Pilot 的团队。Pilot 的独特之处在于:1) 深度自动化——利用算法自动分类交易、连接银行和销售平台数据等,从而提高效率和准确性;2) 专业团队服务——每位客户都有一个专属的位于美国的会计团队提供支持,可通过应用内消息或电子邮件提问并获得专业解答;3) 广泛的扩展服务——除了月度记账,Pilot 还可以提供定制服务,如报税、财务报表审计准备,甚至薪资和应付账款管理(需要定制计划);4) 面向成长型公司的系统——Pilot 支持多账套、多实体合并、存货会计等复杂需求,并提供兼职 CFO 服务以帮助公司进行财务规划和融资支持。与主要竞争对手相比,Pilot 更像是一家**“技术驱动型会计师事务所”**:它利用先进的软件工具和 AI,结合专属会计团队来管理客户的财务。这种模式使得缺乏内部财务团队的初创企业能够获得高质量的财务管理。

渠道策略与市场覆盖: Pilot 采用直销模式进行客户获取,向初创企业社区进行营销,并在初创企业孵化器和风险投资组合公司中建立声誉。它还通过在线内容营销(例如,初创企业财务指南、报告)产生中小型企业客户线索。其服务目前主要覆盖美国境内的公司,因为财务报告标准和税务申报与当地法规密切相关。Pilot 强调由位于美国的团队提供支持,以确保顺畅沟通和专业标准。这种高质量服务模式也意味着 Pilot 专注于美国市场(尤其是科技初创企业中心),尚未在全球范围内大规模扩张。

QuickBooks:盈利模式与特点

定价模式与收入来源: QuickBooks(由 Intuit 拥有)采用典型的软件即服务 (SaaS) 商业模式,以经常性订阅费作为其主要收入来源。QuickBooks Online 根据功能提供多个订阅层级(例如,简易版、个体户版、小型企业版、高级版),按月或按年计费。截至2023年,QuickBooks Online 在全球拥有超过 700万 在线订阅用户。除了软件订阅,Intuit 还通过向 QuickBooks 用户提供附加增值金融服务获利,其中包括薪资服务支付处理服务。例如,用户可以额外付费购买 QuickBooks 薪资(根据员工数量和服务级别收取月费)来处理薪资。当用户通过 QuickBooks 开具发票并接受在线支付时,Intuit 会从信用卡或银行转账交易中收取佣金(按百分比收费)。此外,Intuit 还通过培训和认证项目(例如,会计师 ProAdvisor 认证培训费用)产生收入。总的来说,QuickBooks 拥有多元化的收入来源:基础会计软件订阅费构成了经常性收入基础,辅以金融服务费和附加模块费用,共同构成了其主要的盈利模式。

客户类型: QuickBooks 服务于广泛的客户群体,包括个体经营者、自由职业者、小型企业,甚至一些中型企业和会计专业人士。QuickBooks Online 提供从个体户/自雇版本到高级版本的不同层级,满足从一人公司到拥有数十名员工的企业的记账需求。根据 Intuit 的业务分析,QuickBooks 的核心用户传统上是拥有1-10名员工的小型企业。近年来,为了覆盖更大的客户,QuickBooks 也一直在增强功能,以服务更复杂的中型企业(例如,提供更精细的权限控制、多实体报告及其他高级功能)。会计师和簿记公司也是 QuickBooks 的重要用户群体——Intuit 通过 ProAdvisor 项目吸引会计专业人士为其客户使用 QuickBooks,从而间接扩大了 QuickBooks 在小型企业中的覆盖范围。

产品定位与差异化: 作为业内最成熟的会计软件之一,QuickBooks 定位为一款多功能、全面的财务工具。其优势包括:1) 功能丰富——涵盖收支分类、报告、企业现金流管理、应收/应付账款、库存、项目、税务准备辅助等模块;2) 完善的生态系统——它拥有庞大的第三方应用市场集成,有超过1,000个应用程序可连接到 QuickBooks 数据(如销售点系统、电子商务平台、费用报告工具等),允许用户按需添加功能;3) 高市场份额——QuickBooks 在美国小型企业会计软件市场占据主导地位,受益于品牌信任度和庞大的用户群;4) 扩展服务——Intuit 向 QuickBooks 用户提供薪资和支付等服务,为小型企业创建了一站式财务解决方案。这也使得 QuickBooks 比竞争对手拥有更高的每用户平均收入 (ARPU) 潜力(用户除了软件外,还可能购买其金融服务)。值得注意的是,QuickBooks 主要提供软件工具,不直接提供人工记账服务。然而,Intuit 最近推出了**“QuickBooks Live”在线记账作为一项增值服务,由 Intuit 平台上的专业簿记员为 QuickBooks 订阅用户提供每月对账服务,费用约为每月 $300-$700(根据业务规模)。这表明 QuickBooks 正在通过整合服务来增强其产品体系,但总体而言,其核心定位仍然是赋能用户或其会计师使用软件自行记账**。这与 Pilot 和 Bench 等完全托管服务有本质区别。

渠道策略与市场覆盖: QuickBooks 的销售渠道包括在线直销合作伙伴:一方面,Intuit 通过其官方网站直接向小型企业销售订阅,通常提供试用折扣(例如,新用户前三个月五折优惠)以吸引客户。另一方面,Intuit 建立了庞大的会计师合作伙伴网络 (ProAdvisor),鼓励会计师向其客户推荐或转售 QuickBooks,并提供折扣或佣金。这一策略使得 QuickBooks 成为许多会计师事务所默认的小型企业会计系统。在市场覆盖方面,QuickBooks 的母公司 Intuit 植根于美国,但也已在多个国家(例如,加拿大、英国、澳大利亚)推出了本地化版本。截至目前,QuickBooks 在全球100多个国家拥有用户,全球在线用户超过700万。然而,其最大市场仍是北美,而在其他地区则面临来自 Xero 和本地软件的竞争。Intuit 也通过收购或投资进入新市场,但总的来说,QuickBooks 的品牌影响力集中在英语国家,通过在线营销、搜索引擎可见性和合作伙伴推荐实现市场渗透。

Xero:盈利模式与特点

定价模式与收入来源: Xero,一家来自新西兰的云会计软件公司,采用纯订阅制SaaS模式。Xero 主要通过向小型企业客户收取软件订阅费来盈利。Xero 根据不同的规模和需求提供多种订阅计划(例如,在美国市场有 Early、Growing、Established 等层级,在其他国家有 Starter、Standard、Premium 等),功能和可处理的业务量逐步增加,订阅费也按月递增。这种基于功能的阶梯定价策略为 Xero 提供了稳定且可预测的经常性收入。截至 2023 年,Xero 在全球 180 多个国家拥有超过 440 万付费订阅用户。除了核心会计订阅,Xero 还通过增值服务产生部分收入。例如,Xero 提供自己的薪资管理模块(在某些国家作为付费附加项或包含在更高层级计划中),以及费用管理和项目管理附加功能模块,这些模块要么通过更高层级的订阅计划收费,要么作为单独的附加订阅收费。此外,Xero 拥有一个庞大的第三方应用市场,允许客户订阅集成的第三方应用程序;自 2021 年以来,Xero 对通过其应用商店订购的第三方应用订阅收取 15% 的“推荐收入分成”。这意味着当用户为某些集成应用程序付费时,Xero 可以赚取一定的佣金。因此,Xero 的收入来源除了订阅费外,还包括高级功能附加费第三方服务佣金,形成了多元化的构成。

客户类型: Xero 的客户主要是小型企业,涵盖初创公司、各行各业的商家,以及服务小型企业客户的会计/簿记事务所。Xero 起源于大洋洲市场,在澳大利亚和新西兰积累了大量小型企业用户,并通过会计师渠道迅速扩张。Xero 强调其与会计合作伙伴的紧密关系;许多会计事务所向其客户推荐 Xero,并通过 Xero 的合作伙伴计划获得折扣,从而降低了客户的采用成本。这使得 Xero 在目标客户方面与 QuickBooks 类似(两者都广泛服务于微型/小型企业和财务代理),但存在区域侧重:Xero 在其本土澳大利亚/新西兰拥有极高的市场份额,在英国和欧洲取得了显著增长,并正在努力追赶 QuickBooks 在北美市场的份额。典型的 Xero 客户可能是拥有 1-50 名员工的小公司,需要专业的财务管理,但不希望使用复杂且昂贵的企业级系统。Xero 还为微型企业提供低价计划(例如 Starter/Early 计划),方便个体经营者以较低的月费使用正式的复式记账工具。

产品定位与差异化: Xero 被定位为**“云原生”全球会计平台**。其差异化体现在:1) 卓越的用户体验——Xero 的界面用户友好、美观且直观(倡导其“美丽商业”理念),使得不熟悉会计的小企业主也能相对容易上手,这是其早期在国际市场迅速普及的原因之一;2) 云端协作——Xero 强调赋能小企业主及其外部会计师在云端共同查看账簿,实现无缝协作;3) 开放集成——Xero 拥有开放 API 和庞大的应用生态系统,提供 1,000 多个第三方应用程序接口,例如与电商、POS、CRM、支付系统等集成。这种开放策略允许小企业将 Xero 作为中央财务枢纽,并扩展定制化的业务流程;4) 持续创新——Xero 每月持续更新其云功能,根据客户和行业需求添加功能。例如,Xero 不断改进其本地化,以适应满足各国税务系统、发票要求和多币种会计等领域的市场需求。Xero 与 QuickBooks 的一个战略性差异在于,Xero 没有像 Intuit 那样多的专有附加金融服务;相反,它更专注于纯粹的软件功能合作伙伴集成。Xero 没有推出自己的簿记服务团队(不同于 Pilot/Bench),而是坚定地作为会计软件平台提供商,赋能会计师和小型企业主使用该软件。这一市场定位赢得了全球众多会计事务所的认可。总而言之,Xero 以高可用性和全球扩张能力脱颖而出,与 QuickBooks 正面竞争。

渠道策略与市场覆盖: Xero 采用双管齐下的市场策略:一方面,它通过在线营销和免费试用直接获取终端小型企业用户;另一方面,它深度耕耘会计师和簿记师网络。Xero 建立了正式的 Xero 合作伙伴计划,邀请会计师和簿记事务所成为认证顾问,并为他们的客户实施 Xero;这些合作伙伴根据他们带来的付费客户数量获得折扣和返利,并被列为 Xero 官方网站上的推荐顾问。这种模式有助于 Xero 在新市场中快速建立信任和认可。在区域覆盖方面,Xero 起始于新西兰,目前在全球多个主要地区设有办事处,包括澳大利亚、英国、美国、加拿大和亚洲部分地区。Xero 在澳大利亚和新西兰的小型企业云会计领域占据领先地位,并在英国市场保持快速增长势头(受益于英国的“税务数字化”倡议)。在美国和加拿大,尽管 Xero 的市场份额仍落后于 QuickBooks,但它已积累了可观的用户基础并持续投入扩张。此外,Xero 还通过与银行合作(例如,与加拿大皇家银行 RBC 合作提供联名版本)和其他渠道进一步触达小型企业客户。因此,Xero 的市场覆盖策略强调国际化合作伙伴驱动的增长,在英语国家与 QuickBooks 竞争,并探索尚未被强大本地软件主导的其他区域市场。

Bench:盈利模式与特点

定价模式与收入来源: Bench是一家提供在线簿记外包服务的公司,总部位于加拿大,但主要服务北美的小型企业。Bench的商业模式与Pilot类似,也基于订阅费:客户支付固定月费,Bench会指派专业的簿记员每月整理其账目并提供财务报表。Bench的定价相对实惠,针对小型企业主要有两种方案:** 基础簿记服务起价约为每月299美元,包含年度报税服务的套餐价格约为每月499美元。最新信息显示,Bench 2024年的订阅价格在每月249美元至349美元之间,具体取决于是否包含报税等服务。Bench的主要收入来源是这些月度服务订阅费**,根据客户选择的方案按月或按年收取。此外,Bench还提供一些一次性收费服务,例如补记账服务(针对簿记工作落后数月甚至数年的企业,涉及历史数据录入和清理)和税务问题咨询,这些都是按需提供的增值项目。总体而言,Bench的收入主要围绕“基础簿记订阅 + 增值报税服务”。

客户类型: Bench的目标客户是缺乏专门会计部门的小型企业主、初创公司和自由职业者。其目标客户通常规模较小,业务相对简单,但渴望专业管理其财务。Bench本身提供调整现金制簿记,主要适用于小规模商业模式。许多Bench客户是年收入和交易量适中的企业家,例如小型电商卖家、咨询师、代理商和餐饮业经营者,他们选择Bench是为了节省记账时间。Bench在初创公司圈子中的知名度不如Pilot,但在传统小企业领域——尤其是那些不需要复杂财务会计、只需基本税务合规的微型企业中,占有一定的市场份额。值得注意的是,Bench服务的典型客户通常财务需求相当基本:例如,不涉及多地点或多子公司合并报表,也不涉及复杂的库存或SaaS递延收入会计要求。因此,Bench的服务重点在于**“减轻超小型企业主的负担。”**

产品定位与差异化: Bench被描述为不是传统的软件,而是一种**“软件 + 人工服务”解决方案。其定位特点如下:1) 全托管服务 – 像Pilot一样,Bench提供一个人工簿记团队来处理客户的簿记工作,而不是仅仅销售软件。客户通过Bench的网页或应用程序界面上传收据并连接银行账户后,Bench的团队会分类交易、每月完成银行对账,并在月末出具损益表、资产负债表等;2) 专有平台 – Bench开发了自己的簿记平台,客户可以在其中查看财务报告并进行沟通。然而,Bench不使用通用软件**(如QuickBooks),这意味着如果客户将来离开Bench,其财务数据需要转换才能迁移到其他系统;3) 整合税务服务 – Bench提供报税协助作为可选服务(与合作注册会计师协调完成报税),客户可以选择捆绑,使其成为一站式“簿记 + 报税”服务;4) 价格竞争力 – 与Pilot相比,Bench的定价显著更低,将其定位为一种经济型解决方案。例如,Bench提供首月免费试用以降低客户的进入门槛,其总体成本对预算有限的微型企业更具吸引力。Bench的局限性在于其服务深度较浅:它不提供首席财务官(CFO)战略咨询,不支持复杂的财务场景,对于快速扩张、正在融资的初创公司,Bench的现金制簿记可能无法满足严格的财务报告要求。因此,Bench自身也承认,它专注于服务**“超小型企业”,当客户业务变得更复杂时,他们可能需要升级到权责发生制会计和更高级的服务。Bench与Pilot的核心区别在于其目标客户——Bench更像是微型企业的经济型簿记外包商**,强调“通过为你记账来节省你的时间和精力”,而Pilot则面向财务要求更高的成长型公司。

渠道策略与市场覆盖: Bench主要通过在线营销获取客户。针对小型企业主,Bench在搜索引擎和社交媒体上投放广告,并运营一个内容博客,提供财务和税务知识以吸引潜在客户。在口碑渠道方面,可以在一些小型企业主社区和初创公司论坛中找到对Bench的推荐。此外,Bench还与一些小型企业服务平台合作进行推荐,例如电商平台或商业银行,它们可能会推荐Bench作为簿记选项。Bench的服务覆盖范围目前主要在美国,也接受加拿大客户(Bench起源于加拿大温哥华)。作为一家初创公司,Bench经历了多轮融资以扩大用户群,但在2023年面临运营困难,并被一家美国税务和金融公司(该公司被称为Employer.com)收购并整合。这表明其扩张主要集中在北美市场,并未深入渗透其他国家。Bench的商业模式严重依赖可扩展运营和人工服务效率,使其扩张速度相对慢于软件公司,但它仍然通过在线直销模式赢得了数千家小企业客户的信任。

Wave:盈利模式与特点

定价模型与收入来源: Wave 是一款知名的免费云会计软件,长期以来一直采用免费增值(freemium)模式运营。其核心的会计、发票和收据管理工具完全免费提供给用户,没有功能或时间限制。Wave 本身不向用户收取软件订阅费,而是通过相关的金融服务收费来盈利。具体来说,Wave 的主要收入来源有两方面:首先,** 来自支付处理的佣金(Wave支付)。小企业用户可以通过 Wave 向客户开具发票并接受在线支付。Wave 集成了信用卡和银行转账支付功能,对交易金额收取一定比例的费用(例如,信用卡支付约为 2.9% + 30美分)。这部分支付处理费收入,在扣除支付网关(如 Stripe)的成本后,大部分成为 Wave 的收入。其次, 薪资服务的订阅费(Wave薪资)。Wave 为美国和加拿大用户提供薪资工具,收取每月基本费用(约 20-35 美元)加上每名员工的费用。使用 Wave 免费会计服务的客户,如果选择在其平台内处理员工工资,则需要为这项服务支付订阅费。过去,Wave 也曾通过在软件界面显示广告来产生部分收入,但从 2017 年开始,它完全移除了广告,专注于服务变现。值得注意的是,Wave 于 2019 年被美国税务巨头 H&R Block 以 5.37 亿美元收购,并通过此举开始提供税务辅导**等增值服务(例如,与会计师进行付费咨询以获取税务指导)。截至 2022 年,在其完全免费策略下,Wave 通过上述金融服务实现了约 1 亿美元的年收入,这表明其拥有庞大的用户基础和交易量。

商业模式调整: 值得注意的是,Wave 在 2024 年初调整了其定价策略。在多年完全免费之后,Wave 宣布新增一个订阅付费层级——在继续提供永久免费版本(Starter)的同时,引入了每月 20 加元(约 15 美元)的 Pro 付费计划,为需要更高级功能的用户提供选择。付费版本将解锁一些高级功能或优先支持,而免费版本则保留基本的会计和发票功能。同时,两个版本的用户仍然可以按需购买薪资和支付等附加服务。此举旨在为 Wave 提供更可持续的收入来源,以支持持续的产品投入。Wave 管理层表示,他们将始终保持免费层级以吸引初创微型企业,但当用户业务增长并有更复杂的需求时,可以选择升级到付费计划,从而使 Wave 自身实现从“流量获取”到“变现增长”的转型。

客户类型: Wave 的目标客户是对价格高度敏感的微型企业、个体创业者和自由职业者。典型的 Wave 用户可能是一家非常小的企业(员工少于 10 人,甚至只有老板身兼多职)。他们通常缺乏专业的会计知识,选择 Wave 是因为它免费且易于使用。Wave 简洁友好的界面和基本功能足以满足这些小规模运营的记账和报税需求。对于新兴的网店店主、自由设计师和独立顾问而言,Wave 提供了一种零成本的手动记账替代方案,从而积累了数百万此类用户。当然,当这些企业规模变大、业务变得更复杂时,他们可能会迁移到更全面的付费软件,如 QuickBooks 或 Xero。但 Wave 已经抓住了巨大的长尾市场:** 不愿或无法为软件付费的微型创业者**。Wave 通过服务费变现,将这些免费用户的现金流转化为收入(例如,如果发票支付通过其支付渠道,就会产生处理费)。因此,其客户既包括完全免费用户(仅使用基本功能),也包括付费服务用户(使用支付和薪资功能)。Wave 新推出的 Pro 计划则瞄准了需要更多功能的现有用户,以较低的月费提供高级应收账款账龄报告、电话支持等额外价值,进一步细分了其客户群。

产品定位与差异化: Wave 的定位可以概括为**“零门槛、小而全”:1) 零成本——它大幅降低了小企业采用专业记账工具的门槛,基本功能无限免费,允许用户无限制地记录交易和生成财务报告。这在同行中极为罕见,是 Wave 最具差异化的特点;2) 简单易用——Wave 移除了复杂的企业级功能,提供了简洁直观的界面。几乎没有会计背景的新手也可以开始开票和记账。这种极简设计赢得了许多非财务背景用户的青睐;3) 集成金融服务——Wave 将收款和薪资等金融流程无缝嵌入软件中,使用户可以在一个平台上完成从开票到收款和薪资的整个流程。在用户体验方面,这是其“集成”优势,而这些流程也是 Wave 收入的来源——将费用嵌入服务中;4) 局限性——Wave 专注于北美微型企业的需求,其软件的税务处理主要支持美国和加拿大(例如,它只能自动处理加拿大和美国的销售税计算)。对于此范围之外的国家,Wave 的税务系统适配不完善。此外,Wave 不提供复式记账的高级设置(尽管 Wave 的后端是复式记账,但用户界面淡化了借贷概念),并且缺乏对多用户权限、库存管理和项目会计等复杂场景的支持。这使得它无法满足大型企业的需求,但这些并非其目标用户的关键需求。总而言之,Wave 通过免费+易用**实现差异化,并通过增值服务变现。这种模式在获取大量小型用户方面非常成功,但其收入规模受限于用户金融交易的总量。进一步的增长需要拓展其付费产品线(这正是其 2024 年的战略转变)。

渠道策略与市场覆盖: Wave 主要通过口碑和自然渠道拓展其用户基础。由于免费,Wave 从一开始就具有病毒式传播特性:用户推荐和媒体对“免费会计软件”的报道带来了流量,使其无需大规模营销支出即可吸引全球众多小型企业。Wave 用户可以在官网直接注册和使用服务,完全自助。从地理上看,任何地区的用户都可以注册 Wave 账户,但由于某些功能(支付、薪资)仅限于北美,因此 Wave 的活跃用户主要集中在美国和加拿大。Wave 还与加拿大皇家银行(RBC Royal Bank)等实体建立了合作关系,在银行平台内嵌入简化版 Wave 工具以获取小企业客户。被 H&R Block 收购后,Wave 有机会通过 H&R Block 的线下税务服务网络接触更多小商户(例如,在报税季向税务客户推荐 Wave)。总体而言,Wave 依靠产品固有的吸引力获取庞大的用户基础,并通过持续提供优质免费体验来留住用户,然后将其中一部分转化为付费服务客户。虽然其市场覆盖范围广泛,但其付费服务目前集中在北美(因为支付和薪资功能在那里可用)。随着新的订阅收费层级的引入,Wave 未来可能会加强营销力度,以明确“免费到付费”的升级路径,旨在提高 ARPU(每用户平均收入)和留存率。目前,Wave 在低端市场中占据独特地位,几乎没有同等规模的免费竞争对手。

Pilot 与主要竞争对手的比较分析

基于上述分析,Pilot、QuickBooks、Xero、Bench 和 Wave 各自拥有独特的商业模式。PilotBench 属于“技术赋能的财务外包服务”类别,允许客户通过订阅方式让专业团队完成其簿记工作。相比之下,** QuickBooks** 和 Xero 是纯粹的软件模式,授权用户或其会计师使用工具自行完成财务工作。Wave 则采取了完全不同的路径,以免费工具进入市场,并通过金融服务实现盈利。Pilot 相较于其他竞争对手的独特优势在于其高度自动化与专业服务集成,专注于高增长客户的需求,提供从簿记到报税和财务咨询的全面解决方案。这使得它对需要节省时间和精力同时要求高质量的初创公司极具吸引力。另一方面,QuickBooks 和 Xero 在市场规模和生态系统方面表现出色,拥有数百万用户和众多集成,加上多年的品牌积累和广泛的功能覆盖,尽管它们要求用户投入时间来使用。Bench 与 Pilot 类似,但定位较低端,** 更便宜但功能相对有限,仅适用于非常小的企业。Wave 最大的竞争优势在于免费**;通过降低进入门槛,它吸引了大量用户,其盈利模式更多地依赖于用户规模和交易量,而非单个用户的高额费用。

下表总结了 Pilot 及其主要竞争对手在盈利模式、客户群、定价策略、收入来源等方面的比较:

供应商盈利模式与定价策略主要客户群主要收入来源产品定位与特点
Pilot技术驱动的财务簿记服务;按年订阅,费用随客户规模而定(基础版每月199美元起,典型每月499美元以上起)。高增长初创企业、中小企业(尤其在科技和电子商务领域)簿记订阅费;报税服务费;CFO咨询服务费。一站式AI + 人工簿记解决方案,强调自动化和专业团队支持,提供权责发生制簿记和定制财务服务,** 取代内部会计部门**。
QuickBooks会计软件SaaS;多版本月度订阅(按功能分级,约15-100美元/月以上),外加附加模块。个体经营者、小型企业、会计师事务所(主流<10名员工的小型企业)软件订阅费;工资服务费(按每名员工/月);支付处理佣金;生态系统相关收入(例如,培训认证)。功能丰富的云会计软件,拥有庞大的用户群和第三方生态系统。定位为通用财务工具,需要用户操作或会计师协助;近期新增Live人工簿记服务。
Xero云会计软件SaaS;月度订阅,分级计划(Starter/Standard/Premium)具有可扩展的功能和限制。小型企业、初创企业;会计师合作伙伴网络(代表许多小型企业)软件订阅费;附加功能费(例如,工资、费用);应用商店佣金(第三方集成服务销售额的15%)。全球云会计平台,“生于云端”,易用性强。定位为协作式财务工具,在开放API和丰富集成方面表现出色;主要基于软件收入,无自有簿记服务。
Bench在线簿记外包服务;月度订阅,固定套餐价格(簿记约299美元/月,簿记+报税约499美元/月,年度折扣)。微型和小型企业主(收入/交易有限,无专职会计师)簿记服务订阅费;报税服务费(套餐内或单独);追溯簿记及其他一次性费用。经济型簿记+报税服务外包,提供专业团队进行簿记和简单报告。定位为小型企业财务助手,软件+人工但功能基础,仅支持收付实现制,无高级财务咨询。价格较低,服务范围有限。
Wave免费增值模式;核心会计软件永久免费。2024年起新增Pro付费层级,每月约15美元用于升级。个人和微型创业者(极度注重成本,财务简单的用户)支付交易处理佣金;工资服务订阅费;(少量来自付费高级订阅,新的税务咨询等)。免费会计平台,强调易用性和零门槛,通过免费工具吸引大量微型用户。通过嵌入支付和工资等金融服务实现盈利。功能相对基础,满足简单簿记/发票需求,附加服务主要面向北美。

表:Pilot 与 QuickBooks、Xero、Bench、Wave 及其他主要会计软件/服务在盈利模式和定位方面的比较。

总结: 作为财务簿记服务领域的新兴参与者,** Pilot** 通过其结合软件和人工专业知识的创新模式,在服务深度上超越了传统软件。QuickBooksXero 则凭借其广泛的用户基础和功能生态系统,在市场广度上占据主导地位。Bench 提供了一种低成本的人工簿记选择,但可扩展性有限。另一方面,** Wave** 则以其免费策略开辟了利基市场,赢得了微型企业的青睐,然后通过金融服务实现盈利。对于像 beancount.io 这样的创业者来说,深入理解这些模式的异同,有助于明确自身的产品定位:是走工具型软件路线服务型解决方案路线,还是探索新的免费增值+价值附加模式。这些公司的成功与挑战将为制定商业策略提供宝贵的参考。

宣布 Beancount.io 网站 v2:更强大、更实用

· 阅读需 4 分钟
Mike Thrift
Mike Thrift
Marketing Manager

我们很高兴地宣布 Beancount.io 全新改版网站正式上线!经过数月精心开发并采纳了我们出色社区的反馈,我们打造了一个更直观、更全面、资源更丰富的中心,满足你所有的纯文本记账需求。

全新面貌

2025-05-07-beancount-website-v2

我们全新改版的首页体现了我们对清晰度和简洁性的承诺——这正是纯文本记账如此强大的核心原则。凭借简洁、现代且注重可用性的设计,我们让你比以往任何时候都更容易找到所需内容。全新的视觉形象更好地代表了我们的使命:让从爱好者到金融专业人士的每个人都能轻松、透明地进行会计处理。

扩展的文档与教程

我们显著扩展了文档和教程部分,以支持各个级别的用户:

  • 入门指南:为纯文本记账新手提供全新改版的入门体验
  • 交互式教程:包含真实世界案例的分步式演练
  • 高级主题:关于复杂会计场景、自定义和集成的详细文档
  • 命令参考:Beancount 中每个命令和选项的全面解释
  • 故障排除:由我们的社区专家贡献的常见问题及其解决方案

每个教程都经过精心制作,通过你可以立即应用于自己账簿的实用示例,引导你从概念到实现。

提升会计能力的资源

除了解释如何使用 Beancount,我们还添加了资源来帮助你提升自身的会计能力:

  • 财务报告模板:用于常见报告(如利润表、资产负债表和现金流量表)的即用型模板
  • 报税指南:针对特定国家/地区的资源,帮助你使用 Beancount 数据进行年终报税准备
  • 行业特定设置:针对自由职业者、小型企业和个人理财的示例配置
  • 社区展示:真实世界案例(已移除敏感数据),展示他人如何组织其会计系统

接下来?

此次网站更新仅仅是个开始。我们致力于根据你的反馈持续改进 Beancount 体验。即将推出:

  • 针对流行金融服务的更多集成教程
  • 翻新 Beancount 移动应用程序
  • 为国际用户提供更多本地化内容
  • 扩展的社区论坛,用于知识共享
  • 关于高级会计主题的定期网络研讨会

我们很乐意听取你对新网站的看法!请通过我们的社区频道分享你的反馈。

记账愉快!

Beancount.io 团队

QuickBooks 到 Beancount 迁移指南

· 阅读需 48 分钟
Mike Thrift
Mike Thrift
Marketing Manager

阶段一:从 QuickBooks 导出数据

迁移五年的数据,第一步是把所有 QuickBooks 记录以可用的格式导出来。QuickBooks 桌面版和 QuickBooks 在线版有不同的导出选项:

2021-12-01-from-quickbooks-to-plain-text-a-migration-playbook

1.1 QuickBooks 桌面版 – 导出选项

IIF (Intuit Interchange Format): QuickBooks 桌面版可以将列表(如会计科目表、客户、供应商)导出为 .IIF 文本文件。在 QuickBooks 桌面版中,进入 文件 (File) → 实用程序 (Utilities) → 导出 (Export) → 列表到 IIF 文件 (Lists to IIF),然后选择你需要的列表(例如,会计科目表、客户、供应商)。这将生成一个包含账户名称、类型和列表数据的文本文件。IIF 是一种专有但易于解析的纯文本格式。用它来获取你的会计科目表和联系人列表,以便在 Beancount 中参考。

总分类账/日记账(通过 CSV): 对于交易数据,QuickBooks 桌面版没有一键式完整导出功能,但你可以使用报表。推荐的方法是导出所需日期范围内的总日记账(所有交易)。在 QuickBooks 桌面版中,打开 报表 (Reports) → 会计与税务 (Accountant & Taxes) → 日记账 (Journal),将日期设置为从最早的交易到今天,然后点击 导出 (Export) → Excel。在移除报表页眉/页脚和空列后,将结果另存为 CSV。确保数值数据是干净的:包含小数(例如 3.00 而不是 3),没有多余的引号,CSV 中没有货币符号或双重负号。CSV 文件应包含 日期 (Date)、交易号 (Trans #)、名称 (Name)、账户 (Account)、备注 (Memo)、借方 (Debit)、贷方 (Credit)、余额 (Balance) 等列(或根据报表格式只有单个金额列)。

提示: QuickBooks 桌面版 2015+ 也可以通过 查找 (Find) 对话框导出交易。使用 编辑 (Edit) → 查找 (Find) → 高级 (Advanced),设置五年的日期范围,然后将结果导出为 CSV。警告: 某些版本将导出限制在 32,768 行。如果你的数据量非常大,请逐年(或分更小的块)导出以避免数据被截断,然后再将它们合并。确保日期范围不重叠以防止重复。

其他格式 (QBO/QFX/QIF): QuickBooks 桌面版可以通过 .QBO (Web Connect) 或 .QFX/.OFX 文件导入银行交易,但对于 QuickBooks 导出,这些不是常规选项。如果你的目标只是提取银行交易,你可能已经从银行那里获得了 QBO/OFX 文件。然而,对于完整的分类账导出,请坚持使用 IIF 和 CSV。QuickBooks 桌面版不能直接导出到 QIF (Quicken Interchange Format) 格式,除非使用第三方工具。如果你确实找到了获取 QIF 的方法,请注意一些账本工具(旧版的 Ledger 2.x)可以读取 QIF,但在我们的流程中,最好还是使用 CSV。

1.2 QuickBooks 在线版 – 导出选项

内置 Excel/CSV 导出: QuickBooks 在线版 (QBO) 提供了一个导出数据工具。进入 设置 ⚙ → 工具 (Tools) → 导出数据 (Export Data)。在导出对话框中,使用报表 (Reports) 标签选择数据(例如总分类账或交易列表),并使用列表 (Lists) 标签选择列表(会计科目表等),选择所有日期 (All dates),然后导出到 Excel。QuickBooks 在线版将下载一个 ZIP 文件,其中包含所选报表和列表的多个 Excel 文件(例如,利润表、资产负债表、总分类账、客户、供应商、会计科目表等)。然后你可以将这些 Excel 文件转换为 CSV 进行处理。

交易明细报表: 如果 QBO 的默认导出不包含单个总分类账文件,你可以手动运行一个详细报表:

  1. 导航到报表 (Reports) 并找到按账户交易明细 (Transaction Detail by Account)(在某些 QBO 版本中是总分类账 (General Ledger))。
  2. 报表期间 (Report period) 设置为完整的五年范围。
  3. 在报表选项下,将分组依据 (Group by) 设置为无 (None)(以便列出单个交易而不是小计)。
  4. 自定义列,至少包括:日期 (Date)、交易类型 (Transaction Type)、编号 (Number)、名称 (Name, Payee/Customer)、备注/描述 (Memo/Description)、账户 (Account)、借方 (Debit)贷方 (Credit)(或单个金额列),以及余额 (Balance)。如果使用了类别 (class) 或地点 (location),也请包含它们。
  5. 运行报表,然后导出到 Excel (Export to Excel)

这将生成一个包含所有交易的详细分类账。将其另存为 CSV。每一行代表一笔交易的一个分录 (split/posting)。之后你需要按交易对这些行进行分组以进行转换。

会计科目表及其他列表: QuickBooks 在线版可以通过 会计 (Accounting) → 会计科目表 (Chart of Accounts) → 批量操作 (Batch Actions) → 导出到 Excel (Export to Excel) 来导出会计科目表。这样做可以获取账户名称和类型。同样,如果你想保留名称作为元数据,也请导出客户、供应商等列表。

QuickBooks Online API (可选): 对于编程方法,Intuit 为 QBO 数据提供了 REST API。高级用户可以创建一个 QuickBooks Online 应用(需要开发者账户),并使用 API 以 JSON 格式获取数据。例如,你可以查询 Account 端点获取会计科目表,查询 JournalEntryGeneralLedger 报表端点获取交易。有像 python-quickbooks 这样的 Python SDK 可以封装 API。然而,使用 API 涉及 OAuth 身份验证,对于一次性迁移来说有些小题大做,除非你偏爱自动化。对于大多数情况,** 手动导出为 CSV/Excel 更简单且不易出错**。


阶段二:转换和清理数据

一旦你有了 CSV (和/或 IIF) 格式的 QuickBooks 数据,下一步就是将其转换为 Beancount 的纯文本账本格式。这包括解析导出的文件,将 QuickBooks 账户映射到 Beancount 的会计科目表,以及按 Beancount 语法格式化交易。

2.1 使用 Python 解析 QuickBooks 导出文件

使用 Python 将确保转换的准确性和可复现性。我们将概述两个关键任务的脚本:** 导入会计科目表转换交易**。

账户导入和映射: 在添加交易之前,在 Beancount 中设置好账户至关重要。QuickBooks 的账户有类型(银行、应收账款、费用等),我们将它们映射到 Beancount 的层级结构(资产、负债、收入、费用等)。例如,我们可以使用如下映射:

# QuickBooks 账户类型到 Beancount 根类别的映射
AccountTypeMap = {
'BANK': 'Assets',
'CCARD': 'Liabilities',
'AR': 'Assets', # 应收账款作为资产
'AP': 'Liabilities', # 应付账款作为负债
'FIXASSET': 'Assets',
'OASSET': 'Assets', # 其他资产
'OCASSET': 'Assets', # 其他流动资产
'LTLIAB': 'Liabilities', # 长期负债
'OCLIAB': 'Liabilities', # 其他流动负债
'EQUITY': 'Equity',
'INC': 'Income',
'EXP': 'Expenses',
'EXINC': 'Income', # 其他收入
'EXEXP': 'Expenses', # 其他费用
}

使用 QuickBooks 桌面版的 IIF 导出文件或 QBO 的账户列表 CSV,我们获取每个账户的名称和类型。然后:

  • 创建 Beancount 账户名称: QuickBooks 有时在账户名称中使用冒号 (:) 来表示子账户(例如 “Current Assets:Checking)。Beancount 使用相同的冒号表示法来表示层级。你通常可以直接重用该名称。如果 QuickBooks 账户名称不以类别开头,则在前面加上映射的类别。例如,一个类型为 BANK、名为 "Checking" 的 QuickBooks 账户在 Beancount 中将变为 Assets:Checking。一个 EXP (费用) 账户 "Meals" 变为 Expenses:Meals,依此类推。

  • 确保命名有效: 移除或替换任何可能混淆 Beancount 的字符。QuickBooks 允许名称中包含 &/ 等字符。明智的做法是剔除或替换特殊字符(例如,用 and 替换 &,移除斜杠或空格)。此外,确保转换后所有账户名称都是唯一的——QuickBooks 可能允许在不同父账户下有相同的子账户名,这没问题,但在 Beancount 中,完整的名称(包括父账户)必须是唯一的。如果需要,重命名或附加一个限定符以区分它们。

  • 输出账户开设指令: 在 Beancount 中,每个使用的账户都必须用 open 指令开设。你可以选择一个在第一笔交易之前的日期(例如,如果迁移 2019–2023 年的数据,对所有开设指令使用 2018-12-31 或更早的日期)。脚本将写出如下行: 2018-12-31 open Assets:Checking USD 2018-12-31 open Expenses:Meals USD 为每个账户都这样做(假设 USD 是主要货币)。为每个账户使用适当的货币(见下面的多币种说明)。

交易转换: 主要挑战是将 QuickBooks 导出的交易(CSV)转换为 Beancount 条目。每个 QuickBooks 交易(发票、账单、支票、日记账分录等)可能有多条分录(行),必须将它们收集到一个 Beancount 交易中。

我们将使用 Python 的 CSV 阅读器来迭代导出的行并累积成分录:

import csv
from collections import defaultdict

# 从 QuickBooks 日记账 CSV 中读取所有行
rows = []
with open('quickbooks_exported_journal.csv', 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for line in reader:
rows.append(line)

# 按交易分组(假设 'Trans #' 标识交易)
transactions = defaultdict(list)
for line in rows:
trans_id = line.get('Trans #') or line.get('Transaction ID') or line.get('Num')
transactions[trans_id].append(line)

现在 transactions 是一个字典,其中每个键是交易 ID/编号,值是该交易的分录列表。接下来,我们将每个组转换为 Beancount 格式:

def format_date(qb_date):
# QuickBooks 的日期可能是 "12/31/2019" 这样的格式
m, d, y = qb_date.split('/')
return f"{y}-{int(m):02d}-{int(d):02d}"

output_lines = []
for trans_id, splits in transactions.items():
# 如果需要,按行顺序对分录排序(通常它们是按顺序导出的)
splits = sorted(splits, key=lambda x: x.get('Line') or 0)
first = splits[0]
date = format_date(first['Date'])
payee = first.get('Name', "").strip()
memo = first.get('Memo', "").strip()
# 交易标题
output_lines.append(f"{date} * \"{payee}\" \"{memo}\"")
if first.get('Num'): # 如果有参考编号,则包含它
output_lines.append(f" number: \"{first['Num']}\"")
# 遍历每个分录/记账
for split in splits:
acct_name = split['Account'].strip()
# 将 QuickBooks 账户名映射到 Beancount 账户(使用之前的映射)
beancount_acct = account_map.get(acct_name, acct_name)
# 确定带符号的金额:
amount = split.get('Amount') or ""
debit = split.get('Debit') or ""
credit = split.get('Credit') or ""
if amount:
# 某些导出文件有一个 Amount 列(贷方为负数)
amt_str = amount
else:
# 如果有单独的 Debit/Credit 列
amt_str = debit if debit else f"-{credit}"
# 为安全起见,移除数字中的逗号
amt_str = amt_str.replace(",", "")
# 附加货币
currency = split.get('Currency') or "USD"
amt_str = f"{amt_str} {currency}"
# 分录的备注/描述
line_memo = split.get('Memo', "").strip()
comment = f" ; {line_memo}" if line_memo else ""
output_lines.append(f" {beancount_acct:<40} {amt_str}{comment}")
# 交易结束 – 空行
output_lines.append("")

这个脚本逻辑执行以下操作:

  • 将日期格式化为 Beancount 的 YYYY-MM-DD 格式。

  • 使用收款人 (Name) 和备注 (Memo) 作为交易的叙述。例如: 2020-05-01 * "ACME Corp" "Invoice payment" (如果没有收款人,你可以使用 QuickBooks 的交易类型或留空收款人引号)。

  • 如果存在参考编号(支票号、发票号等),则添加一个 number 元数据。

  • 迭代每一条分录行:

    • 使用字典 account_map(从会计科目表步骤中填充)将 QuickBooks 账户名映射到 Beancount 账户。
    • 确定金额。根据你的导出文件,可能有一个金额列(带有正/负值)或独立的借方和贷方列。上面的代码处理了这两种情况。它确保贷方表示为负金额,因为在 Beancount 中,每个记账都使用带符号的单个数字。
    • 附加货币(除非存在不同的货币列,否则假设为 USD)。
    • 用账户、金额和带有行备注的注释写入 Beancount 记账行。例如: Assets:Checking 500.00 USD ; Deposit Income:Sales -500.00 USD ; Deposit 这反映了一笔 500 美元的存款(从收入到支票账户)。
  • 列出所有分录后,用一个空行分隔交易。

多币种处理: 如果你的 QuickBooks 数据涉及多种货币,请在每个记账上包含货币代码(如上所示)。确保外币账户以该货币开设。例如,如果你有一个欧元银行账户,你会输出 open Assets:Bank:Checking EUR,并且该账户中的交易将使用 EUR。Beancount 支持多币种账本并会跟踪隐式转换,但如果你想在报表中转换为基础货币,可能需要添加汇率的价格条目。还建议在 Beancount 文件的顶部声明你的主要经营货币(例如,option "operating_currency" "USD")。

运行转换: 保存 Python 脚本(例如,qb_to_beancount.py)并在你导出的文件上运行它。它应该会生成一个包含所有账户和交易的 .beancount 文件。

2.2 处理边缘情况和数据清理

在转换过程中,请注意以下常见的陷阱以及如何解决它们:

  • 账户名称不匹配: QuickBooks 的账户名称可能与 Beancount 的层级名称冲突。例如,QuickBooks 可能有两个不同的父账户,每个都有一个名为 "Insurance" 的子账户。在 Beancount 中,Expenses:Insurance 必须是唯一的。在导出前通过重命名其中一个(例如,“Insurance-Vehicle” vs “Insurance-Health”)来解决此问题,或者在脚本中将它们映射到唯一的 Beancount 账户。一致的命名约定(无特殊字符,并使用层级结构)将省去很多麻烦。如果需要,使用重映射文件的方法:维护一个旧名称 → 新 Beancount 名称的 CSV 或字典,并在转换期间应用它(我们的示例代码使用了一个 account_map,并且可以从文件中加载覆盖项)。

  • 日期和格式: 确保所有日期格式一致。上面的脚本将 M/D/Y 规范化为 ISO 格式。另外,如果你的五年跨度跨越了年终,请注意财政年度与日历年度的问题。Beancount 不关心财政年度的界限,但你以后可能为了方便而按年拆分文件。

  • 数值精度: QuickBooks 处理货币到分,所以以分为单位工作通常没问题。理想情况下,CSV 中的所有金额都应有两位小数。如果任何金额变成了整数(没有小数)或带有逗号/括号(表示负数),请在脚本中清理它们(去除逗号,将 (100.00) 转换为 -100.00 等)。如果按照指示正确导出 CSV,应该已经避免了这些格式问题。

  • 负数和符号: QuickBooks 报表有时将负数显示为 -100.00(100.00),甚至在某些 Excel 导出中显示为 --100.00。清理步骤应该处理这些情况。确保每笔交易的借贷方总和为零。Beancount 会强制执行这一点(如果不平衡,导入时会抛出错误)。

  • 交易重复: 如果你必须分批导出交易(例如,逐年或逐账户),请小心合并它们,不要重叠。检查一年的第一笔交易是否也是前一批的最后一笔,等等。在边界处很容易意外复制一些交易。如果你怀疑有重复,可以按日期对最终的 Beancount 条目进行排序并查找相同的条目,或者使用 Beancount 的唯一交易标签来捕获它们。一种策略是将 QuickBooks 交易号作为元数据包含进来(例如,使用 Trans # 或发票号作为 txn 标签或 quickbooks_id 元数据),然后确保这些 ID 没有重复。

  • 不平衡的分录 / 暂记账户: QuickBooks 可能有奇怪的情况,比如一笔交易有不平衡,QuickBooks 会自动将其调整到“期初余额权益”或“留存收益”账户。例如,在设置初始账户余额时,QuickBooks 通常会将差额记入一个权益账户。这些会出现在导出的交易中。Beancount 将要求显式平衡。你可能需要引入一个用于期初余额的权益账户(通常是 Equity:Opening-Balances)来镜像 QuickBooks。在账本的第一天有一个建立所有账户期初余额的条目是很好的做法(见阶段五)。

  • 多币种边缘情况: 如果使用多币种,QuickBooks 的导出可能会以本国货币或其原生货币列出所有金额。理想情况下,获取每个账户的原生货币数据(QuickBooks 在线版的报表通常会这样做)。在 Beancount 中,每个记账都带有一个货币。如果 QuickBooks 提供了汇率或本国货币换算,你可以忽略这些,并依赖 Beancount 的价格条目。如果 QuickBooks 没有导出汇率,你可能需要手动添加关键日期的价格记录(例如,使用 Beancount 的 price 指令)以匹配估值。然而,对于基本的账本完整性,只要交易以其原始货币平衡就足够了——除非你想要相同的报告,否则不必明确记录未实现损益。

  • 应收账款 / 应付账款: QuickBooks 跟踪发票和账单的详细信息(到期日、支付状态等),这些在纯账本中不会完全转移。你会得到应收(A/R)和应付(A/P)的交易(发票增加 A/R,付款减少 A/R 等),但不会有发票文件或每个发票的客户余额。因此,迁移后,你应该验证 Beancount 中的 A/R 和 A/P 账户余额是否等于 QuickBooks 中客户/供应商的未结余额。如果你需要跟踪发票,可以使用 Beancount 的元数据(例如,包含一个 invoice 标签或链接)。QuickBooks 的发票号应该已经通过 NumMemo 字段导出了——我们的脚本将 Num 保留为交易元数据中的 number: "..."

  • 不活动或已关闭的账户: IIF 导出文件可能包含不活动的账户(如果你选择包含它们)。导入它们没问题(如果它们真的不活动,它们将没有交易并且余额为零)。你可以在最后一笔交易日期之后,用 close 指令在 Beancount 中将它们标记为已关闭。这可以使你的账本保持整洁。例如: 2023-12-31 close Expenses:OldAccount ; migrated after migration 这是可选的,主要是为了整洁。

通过仔细清理和映射上述数据,你将拥有一个在结构上与你的 QuickBooks 数据相匹配的 Beancount 账本文件。下一步是验证它在数值上也与 QuickBooks 相匹配。


阶段三:数据验证和对账

验证是会计数据迁移中至关重要的一步。我们需要确保 Beancount 账本与 QuickBooks 账簿精确到每一分钱。可以使用多种策略和工具:

3.1 试算平衡表对账

试算平衡表报告列出了所有账户的期末余额(带有借方和贷方或正/负标记),并且净额应为零。在两个系统中运行同一日期的试算平衡表是确认整体准确性的最快方法。

  • 在 QuickBooks 中: 运行最后一年的最后一天(例如,2023年12月31日)的试算平衡表 (Trial Balance) 报告。这份报告显示了每个账户的余额。导出它或记下关键数字。

  • 在 Beancount 中: 使用 Beancount 的报告功能生成试算平衡表。一个简单的方法是通过命令行:

    bean-report migrated.beancount balances

    balances 报告就是一个试算平衡表,列出了所有账户及其余额。你也可以在 Fava(Beancount 的网页界面)中打开文件,并查看 BalancesBalance Sheet 部分。Beancount 中的每个账户余额都应与 QuickBooks 的试算平衡表相匹配。例如,如果 QuickBooks 显示应收账款 = 5,000,那么BeancountAssets:AccountsReceivable账户总额应为5,000*,那么 Beancount 的 `Assets:Accounts Receivable` 账户总额应为 5,000(借方)。如果销售收入 = 200,000,那么Beancount中的Income:Sales应显示200,000*,那么 Beancount 中的 `Income:Sales` 应显示 200,000(贷方,如果使用将贷方显示为负数的试算平衡表,可能会显示为 -200,000)。

如果存在差异,找出它们:

  • 检查是否整个账户丢失或多余(我们是否忘记了一个账户,或者包含了一个在迁移期之前已经关闭的账户?)。
  • 如果余额不对,深入检查:QuickBooks 可以为该账户运行账户快速报告 (Account QuickReport) 或分类账明细,你可以将其与 Beancount 中该账户的登记簿 (bean-report migrated.beancount register -a AccountName) 进行比较。差异有时来自丢失的交易或重复的交易。

同时验证 Beancount 试算平衡表中所有账户的总和为零(它会打印一个总计,应该为零或非常接近零)。Beancount 强制执行复式记账,所以如果你有任何不为零的不平衡,意味着资产减去负债加权益不为零,表明存在问题(QuickBooks 通常也不允许这种情况,但如果某些数据丢失了可能会发生)。

3.2 账户余额比较

除了试算平衡表,你还可以比较特定的财务报表:

  • 资产负债表: 运行 QuickBooks 最终日期的资产负债表和 Beancount 的资产负债表 (bean-report migrated.beancount balsheet)。这与试算平衡表类似,但按资产、负债、权益组织。数字应该按类别对齐。为了更精细的检查,比较主要账户的总额:现金、应收账款、固定资产、应付账款、权益等。

  • 利润表 (损益表): 在 QuickBooks 和 Beancount 中运行五年期间(或逐年)的利润表 (bean-report migrated.beancount income 用于整个期间的利润表)。Beancount 的净收入应与 QuickBooks 每个期间的净收入相等。如果你迁移了所有五年,累计净收入应该匹配。你还可以比较单个收入和费用总额,以确保没有类别被遗漏或重复计算。

  • 随机抽样交易: 随机挑选几笔交易(特别是从每年和每个主要账户中挑选)并验证它们是否正确迁移。例如,在 QuickBooks 中找到 3 年前的一张发票,然后在 Beancount 文件中搜索其金额或备注(因为所有交易都是文本,你可以在文本编辑器中打开 .beancount 文件或使用搜索工具)。检查日期、金额和账户是否匹配。这有助于捕捉任何日期格式问题或账户映射错误。

3.3 自动化完整性检查

利用 Beancount 自身的验证工具:

  • bean-check: 运行 bean-check migrated.beancount。这将解析文件并报告任何语法或平衡错误。如果脚本遗漏了像未开设的账户或不平衡的交易之类的问题,bean-check 会标记出来。干净的通过(没有输出)意味着文件至少在内部是一致的。

  • 余额断言: 你可以在账本中为关键账户添加明确的余额断言作为额外检查。例如,如果你知道某个日期银行账户的余额,添加一行: 2023-12-31 balance Assets:Bank:Checking 10000.00 USD 然后 bean-check 将确保在该日期,账本中的余额确实是 $10,000。这是可选的,但对于非常重要的账户很有用。你可以从 QuickBooks 获取期末余额(例如,每年年底),并在 Beancount 文件中进行断言。如果任何断言失败,Beancount 将报告差异。

  • 试算平衡表滚动检查: 如果你愿意,可以进行逐期检查。对于每一年,比较净变化。例如,QuickBooks 2020 年的净收入与 Beancount 2020 年的净收入,等等,以确保每年都正确地结转到权益中(QuickBooks 在每个新年自动将净收入滚入留存收益;在 Beancount 中你只会看到累计的权益)。如果你看到差异,这可能表明特定年份的数据存在问题。

  • 交易计数和重复: 计算 QuickBooks 与 Beancount 中的交易数量。QuickBooks 不容易直接显示计数,但你可以通过计算 CSV 中的行数(每个交易标题与分录)来估计。在 Beancount 中,一个快速的方法是计算文件中 txn* " 的出现次数。它们应该等于或略高于 QuickBooks(如果你添加了期初余额交易或调整)。显著的不匹配意味着某些内容可能被遗漏或重复了。我们使用元数据中的唯一 ID 可以提供帮助:如果你怀疑有重复,可以在 Beancount 文件中搜索相同的支票号或发票号是否出现了两次。

  • 对账状态: 我们在脚本中根据 QuickBooks 的已清算状态包含了一个 rec: "y""n" 的元数据(在示例中为 rec)。这不是一个标准的 Beancount 功能(Beancount 不像 Ledger 那样跟踪已清算/待处理状态),但它可以作为有用的元数据。你可能需要验证在 QuickBooks 中所有已对账的交易都存在。最终,在 Beancount 中重新对账银行账户(使用你的银行对账单)可能是证明没有任何遗漏的最终证据。

通过执行这些验证,你可以建立对迁移保留了数据的信心。在这个阶段要花足够的时间——现在修复异常比几个月后依赖这些账簿时要容易得多。如果验证失败,常见问题包括:账户的期初余额丢失、交易日期超出范围,或条目的符号反转。一旦确定,这些都是可以修复的。


阶段四:提交到 Beancount 账本

在清理和验证之后,是时候将数据正式化到你的 Beancount 账本结构中了。“提交”在这里既指最终确定账本文件,也可能指将它们检入版本控制系统以备审计。

4.1 组织账本文件和配置

决定如何组织 Beancount 账本文件。对于五年的数据,你可以将所有内容保存在一个文件中,或者按年份或类别拆分。一个常见、清晰的结构是:

  • 主账本文件: 例如,ledger.beancount – 这是可以 include 其他文件的入口点。它可能包含全局选项,然后包含年度文件。
  • 账户文件: 定义会计科目表和期初余额。例如,accounts.beancount 包含所有 open 指令(由脚本生成)。你也可以在这里列出商品(货币)。
  • 交易文件: 每年一个,例如 2019.beancount, 2020.beancount 等,包含该年的交易。这使每个文件的大小易于管理,并允许你在需要时专注于某一年。或者,你可以按实体或账户拆分,但按时间拆分对于财务数据来说很直接。

主文件示例:

option "title" "我的商业账本"
option "operating_currency" "USD"

include "accounts.beancount"
include "2019.beancount"
include "2020.beancount"
...
include "2023.beancount"

这样,当你运行报告时,所有数据都会被汇总,但你保持了秩序。

Beancount 不要求多个文件——你可以只有一个大文件——但上述结构提高了清晰度和版本控制。根据 Beancount 的最佳实践,使用清晰的节标题并按逻辑对相关条目进行分组是很好的做法。

4.2 设置期初余额和权益

如果你的迁移不是从绝对零开始,你需要处理期初余额。两种情况:

  • 从零开始的账簿: 如果五年期始于业务成立之初(例如,你从 2019 年 1 月开始使用 QuickBooks,所有账户除了初始权益外都为零),那么你可能不需要一个单独的期初余额交易。2019 年的第一批交易(如向银行账户注入初始资金)将自然地建立期初余额。只需确保任何初始资本之前的留存收益都通过权益交易入账。

  • 中途开始的账簿(部分历史): 如果你更早开始使用 QuickBooks,而 2019 年是一个中点,那么截至 2019 年 1 月 1 日,每个账户都有一个结转余额。QuickBooks 会将这些作为期初余额或留存收益。在 Beancount 中,通常的做法是在你的开始日期前一天创建一个期初余额条目:

    • 使用一个名为 Equity:Opening-Balances(或类似名称)的权益账户来抵消所有期初金额的总和。
    • 例如:如果在 2018-12-31,现金为 10,000,应收账款为10,000,应收账款为 5,000,应付账款为 3,000(贷方),你会写一笔交易:20181231"OpeningBalances"Assets:Cash10000.00USDAssets:AccountsReceivable5000.00USDLiabilities:AccountsPayable3000.00USDEquity:OpeningBalances12000.00USD这使得OpeningBalances账户的余额为负数总和(–3,000(贷方),你会写一笔交易: `2018-12-31 * "Opening Balances"` ` Assets:Cash 10000.00 USD ` ` Assets:Accounts Receivable 5000.00 USD ` ` Liabilities:Accounts Payable -3000.00 USD ` ` Equity:Opening-Balances -12000.00 USD ` 这使得 `Opening-Balances` 账户的余额为负数总和(–12k),从而平衡了该条目。现在,所有资产/负债账户在 2019 年初都具有正确的余额。这应该与 QuickBooks 的任何“留存收益”或结转余额相对应。
    • 或者,使用 Beancount 的 padbalance 指令:对于每个账户,你可以从 Opening-Balances pad 它,并断言其余额。这是一种更自动化的方式。例如: 2018-12-31 pad Assets:Cash Equity:Opening-Balances 2018-12-31 balance Assets:Cash 10000.00 USD 这告诉 Beancount 插入任何必要的条目(到 Opening-Balances),以便现金在该日期等于 10000 USD。对每个账户都这样做。结果类似,但像第一种方法那样写一个明确的交易也很直接。
  • 留存收益: QuickBooks 不会明确导出一笔“留存收益”交易——它只是计算它。迁移后,你可能会注意到 Equity:Retained Earnings 是零,如果你没有创建它的话。在 Beancount 中,留存收益只是前几年的利润。你可以选择创建一个留存收益账户,并在每个新年的第一天将以前的利润转入其中,或者干脆让权益成为所有收入/费用的总和(这在报告的权益部分下显示)。为了透明度,一些用户每年都会做结账分录。这是可选的,主要用于展示。由于我们迁移了所有交易,如果你按年运行报告,每年的利润自然会累计。

  • 比较检查: 设置期初余额后,在开始日期运行资产负债表,以确保一切正确(它应该显示那些期初余额与期初权益相抵为零)。

4.3 最终确定和版本控制

现在数据已是 Beancount 格式并已结构化,明智的做法是将文件提交到版本控制仓库(例如,git)。对账本的每次更改都可以被跟踪,并且你有一个所有修改的审计追踪。这是纯文本会计的一个主要优势。例如,在 QuickBooks 中,更改可能不容易进行差异比较,但在 Beancount 中,你可以看到逐行的差异。正如一些用户指出的,使用 Beancount 你可以获得透明度以及在需要时恢复更改的能力——每个条目都可以追溯到变更历史。

考虑将这次初始迁移的提交标记为 v1.0 或类似标记,这样你就知道它代表了从 QuickBooks 导入时的账簿状态。今后,你将直接在 Beancount 中输入新交易(或从银行源导入等),并且你可以使用常规的软件开发实践(每月或每天提交,使用分支进行实验等)。

设置 Fava 或其他工具: Fava 是 Beancount 的一个 Web 界面,可以方便地查看报告。提交后,运行 fava ledger.beancount 来浏览财务报表,并最后一次与你的 QuickBooks 报告进行比较。你可能会在 UI 中更容易发现微小的差异(例如,一个本应为零但显示微小余额的账户表明有遗漏的结账分录或一个孤立的交易)。

命名约定和一致性: 你现在拥有完全的控制权,所以要确保一致性:

  • 所有账户都应该有清晰的名称,以大写的类别名称开头(Assets, Liabilities 等)。如果任何名称看起来奇怪(例如,由于 QuickBooks 的大小写不匹配导致的 Assets:assets:SomeAccount),在账户文件中重命名它们并更新交易(对文件进行快速查找/替换可以做到这一点,或者使用 Beancount 的 bean-format 或编辑器的多光标功能)。
  • 商品符号(货币代码)应该一致。对于美元,到处都使用 USD(而不是 $US$)。对于其他货币,使用标准代码(EUR, GBP 等)。这种一致性对于 Beancount 的价格查找和报告很重要。
  • 移除任何可能已创建的临时或虚拟账户(例如,如果你在脚本中使用 Expenses:Miscellaneous 作为未知账户的通用账户,尝试通过正确映射所有账户来消除它们)。

关闭 QuickBooks: 此时,你应该在 Beancount 中有与 QuickBooks 相匹配的并行账簿。有些人选择在短时间内并行运行两个系统,以确保没有遗漏。但如果验证是可靠的,你可以“关闭” QuickBooks 账簿:

  • 如果这是一个公司环境,考虑导出所有 QuickBooks 源文件(发票、账单、收据)作为记录,因为除非你手动附加,否则它们不会存在于 Beancount 中。
  • 保留 QuickBooks 数据的备份(公司文件和导出文件)。
  • 从今往后,将 Beancount 账本作为主要的记录系统。

通过将数据提交到 Beancount 账本,你已经完成了迁移流程。最后一步是进行审计并展示财务报表的一致性,以让你自己(以及任何利益相关者或审计师)满意迁移是成功的。


阶段五:迁移后审计和示例

为了说明迁移的成功,准备一份财务报表的前后对比,并可能提供交易的差异对比。这为账簿的一致性提供了证据。

5.1 验证财务报表

从 QuickBooks 和 Beancount 中生成相同日期的关键财务报告并进行比较:

  • 截至 2023 年 12 月 31 日的资产负债表: 逐行比较资产、负债和权益总额。它们应该匹配。例如,如果 QuickBooks 显示总资产 = 150,000总负债+权益=150,000**,** 总负债 + 权益 = 150,000,那么 Beancount 的资产负债表也应显示相同的总额。如果你对账户结构做了微调(比如合并了一些子账户),在比较时要考虑到这一点,或者分解到下一级以确保总和相等。

  • 2019–2023 年利润表: 确保每年(或整个期间)的总收入、总费用和净利润是相同的。如果 QuickBooks 在报告上进行了一些四舍五入,可能会出现微小差异,但交易通常精确到分,所以净利润应该是精确的。如果某年的利润不同,深入研究该年的数据——这通常是该时期有遗漏或重复条目的迹象。

  • 试算平衡表差异: 如果可能,创建一个电子表格,列出每个账户以及来自 QuickBooks 和 Beancount 的余额。由于我们期望它们匹配,这可能是一个全为零的差异列。这本质上是我们讨论过的试算平衡表交叉检查,但把它写出来有助于记录。

5.2 示例比较(迁移前 vs 迁移后)

下面是一个示例片段,展示了数据的一致性。假设我们 2023 年 12 月 31 日的 QuickBooks 试算平衡表是:

账户QuickBooks 余额 (2023年12月31日)
资产 (Assets)
  Assets:Bank:Checking$12,500.00 (借方)
  Assets:Accounts Receivable$3,200.00 (借方)
负债 (Liabilities)
  Liabilities:Credit Card$-1,200.00 (贷方)
  Liabilities:Loans Payable$-5,000.00 (贷方)
权益 (Equity)
  Equity:Opening-Balances$-7,500.00 (贷方)
  Equity:Retained Earnings$-2,000.00 (贷方)
  Equity:Current Year Profit$0.00

在 Beancount 中,导入并记入所有截至 2023 年的交易后,bean-report balances(试算平衡表)输出:

账户Beancount 余额 (2023年12月31日)
资产 (Assets)
  Assets:Bank:Checking12,500.00 USD (借方)
  Assets:Accounts Receivable3,200.00 USD (借方)
负债 (Liabilities)
  Liabilities:Credit Card-1,200.00 USD (贷方)
  Liabilities:Loans Payable-5,000.00 USD (贷方)
权益 (Equity)
  Equity:Opening-Balances-7,500.00 USD (贷方)
  Equity:Retained Earnings-2,000.00 USD (贷方)
  Equity:Profit (2019-2023)0.00 USD

(注意:权益部分的结构可能不同;关键是总额一致。在这里,Beancount 中的“利润 (2019-2023)”扮演了当年利润/留存收益合并的角色,显示为零是因为利润已结转至留存收益。)

如上所示,每个账户都精确到分。借方总额等于贷方总额。

此外,如果我们运行 2023 年的利润表:

  • QuickBooks: 收入 50,000,费用50,000,费用 48,000,净利润 $2,000。
  • Beancount: 收入 50,000,费用50,000,费用 48,000,净利润 $2,000(然后结转到留存收益或出现在年终资产负债表的权益部分)。

如果需要,你可以创建交易的差异对比,但由于 QuickBooks 数据不是账本格式,依赖报表更有效。可以将 QuickBooks CSV 和 Beancount 交易按日期排序,并比较关键字段作为最后检查(这可以在 Excel 中或用脚本完成)。然而,鉴于我们信任之前的验证,财务报表检查通常就足够了。

5.3 审计技巧

  • 如果审计师或利益相关者需要保证,请并排展示迁移前后的财务报表Beancount 的透明度实际上可以简化审计,因为你可以快速地从报表上的每个数字追溯到源条目(特别是使用 Fava 的下钻功能)。
  • 保留 QuickBooks 备份和导出的 CSV 文件作为审计追踪的一部分。记录迁移过程中所做的任何调整(例如,“为保持一致性将账户 X 重命名为 Y”或“为清晰起见将交易 Z 分为两个条目”,如果你做了这样的更改)。
  • 从今往后,在 Beancount 中实施定期检查。例如,每月对账银行账户并对其期末余额进行断言,有助于捕捉任何数据问题或录入错误。迁移提供了一个良好的基线;在新系统中保持纪律将确保持续的准确性。

最后,庆祝迁移完成:你已经成功地将五年的会计数据从 QuickBooks 转移到了 Beancount。数据现在以轻量级、版本控制的文本格式存在,具有完整的复式记账完整性。你导出了数据,用 Python 脚本转换了它,通过试算平衡表和报告验证了其完整性,并将其提交到一个组织良好的 Beancount 账本中。这个全面的过程确保了 Beancount 账本是你在五年期间 QuickBooks 账簿的准确、忠实的复制品,为你未来的精简会计工作奠定了基础。

Beancount 引入多文件支持

· 阅读需 2 分钟
Mike Thrift
Mike Thrift
Marketing Manager

自二月份以来,我们的许多客户一直在询问如何向一个账本添加多个文件。他们需要文件结构来归档或分类交易。因此,经过几个月的工作,我们很高兴地宣布此功能已免费发布。

以下是使用方法:

文件 > 创建新文件

2021-09-24-multi-file-one-ledger

前往左侧导航栏中的文件编辑器选项卡。然后,点击“文件”下拉菜单并选择“创建新文件”。

文件 > 创建新文件

命名新文件

为你的文件指定一个有效的文件名并保存。所有文件名必须以“.bean”结尾。

命名新文件

包含文件

这是一个关键步骤,你必须在 main.bean 中包含新创建的文件。

例如,如果你添加了 stock.bean,则在 main.bean 中指定 include "stock.bean"

包含文件

刷新并导航到文件

刷新页面,你将看到文件出现在“文件”下拉菜单中。

刷新并导航到文件

重命名或删除文件

导航到文件后,你可以在“编辑”下拉菜单中重命名或删除它。

重命名或删除文件

遇到问题?

请在 https://t.me/beancount 提问。

Fava 升级至 1.19 版本:主要变更与改进

· 阅读需 1 分钟
Mike Thrift
Mike Thrift
Marketing Manager

我们已将 MIT 许可的开源软件 Fava 升级至 1.19 版本。以下是自上次更新以来的变更内容:

  • v1.19 (2021-05-18)
    • conversioninterval 选项迁移至 default-page 选项
    • 添加选项 invert-income-liabilities-equity
    • 升级至 CodeMirror 6
    • 新增保加利亚语翻译
    • 其他小改进和错误修复
  • v1.18 (2021-01-16)
    • 一些小改进和各种错误修复。

感到兴奋吗?立即体验:https://beancount.io/ledger/

2021-07-16-upgrade-fava-to-1-19

有疑问?我们会在 https://t.me/beancount 等你 :)

Beancount 应用更新:提升用户体验

· 阅读需 2 分钟
Mike Thrift
Mike Thrift
Marketing Manager

我们很高兴地宣布 Beancount 应用 0.4.0 版本发布,带来了新功能和改进,以提升你的财务管理体验。

新功能

📧 邮件报告订阅

通过可定制的邮件报告,随时掌握你的财务状况。选择你希望接收的财务信息以及接收频率。非常适合:

  • 月度预算回顾
  • 每周支出汇总
  • 账户余额更新

📢 公告部分

不错过任何重要更新!我们新的公告部分将向你提供以下信息:

  • 最新功能和改进
  • 提升财务追踪的技巧
  • 社区新闻和活动

Beancount 应用 0.4.0 版本公告

Beancount 0.4.0 版本截图

性能改进

一如既往,我们使应用运行更快、更可靠,确保你在管理财务时获得流畅的体验。

分享你的想法

你的反馈是我们开发的动力。喜欢新功能吗?在应用商店给我们评分,帮助塑造 Beancount 的未来!

从 App Store 下载从 Play Store 下载

需要帮助?

加入我们的 Telegram 社区,获取支持、技巧,并参与关于使用 Beancount 进行个人财务管理的讨论。