diff --git a/hive/indexer/accounts.py b/hive/indexer/accounts.py
index 3c8de1b..485320c 100644
--- a/hive/indexer/accounts.py
+++ b/hive/indexer/accounts.py
@@ -186,6 +186,7 @@ class Accounts:
         # pull out valid profile md and delete the key
         profile = safe_profile_metadata(account)
         del account['json_metadata']
+        del account['posting_json_metadata']
 
         active_at = max(account['created'],
                         account['last_account_update'],
diff --git a/hive/utils/account.py b/hive/utils/account.py
index fe1302d..caf3830 100644
--- a/hive/utils/account.py
+++ b/hive/utils/account.py
@@ -6,12 +6,19 @@ from hive.utils.normalize import trunc
 def safe_profile_metadata(account):
     """Given an account, return sanitized profile data."""
     prof = {}
+
     try:
-        prof = json.loads(account['json_metadata'])['profile']
-        if not isinstance(prof, dict):
-            prof = {}
+        # read from posting_json_metadata, if version==2
+        prof = json.loads(account['posting_json_metadata'])['profile']
+        assert isinstance(prof, dict)
+        assert 'version' in prof and prof['version'] == 2
     except Exception:
-        pass
+        try:
+            # fallback to json_metadata
+            prof = json.loads(account['json_metadata'])['profile']
+            assert isinstance(prof, dict)
+        except Exception:
+            prof = {}
 
     name = str(prof['name']) if 'name' in prof else None
     about = str(prof['about']) if 'about' in prof else None

Support for account_update2 / posting_json_metadata
I broadcasted posting_json_metadata using the new account_update2 operation (https://steemd.com/@tftest1), but unlike when broadcasting json_metadata, this does not change the information that are indexed in hive_accounts
diff --git a/tests/utils/test_utils_account.py b/tests/utils/test_utils_account.py
index b112e11..deb0db1 100644
--- a/tests/utils/test_utils_account.py
+++ b/tests/utils/test_utils_account.py
@@ -11,8 +11,9 @@ def test_valid_account():
         website='http://www.davincilife.com/',
         cover_image='https://steemitimages.com/0x0/https://pbs.twimg.com/profile_banners/816255358066946050/1483447009/1500x500',
         profile_image='https://www.parhlo.com/wp-content/uploads/2016/01/tmp617041537745813506.jpg',
+        version=2,
     )
-    account = {'name': 'foo', 'json_metadata': json.dumps(dict(profile=raw_profile))}
+    account = {'name': 'foo', 'posting_json_metadata': json.dumps(dict(profile=raw_profile))}
 
     safe_profile = safe_profile_metadata(account)
     for key, safe_value in safe_profile.items():
@@ -26,7 +27,11 @@ def test_invalid_account():
         cover_image='example.com/avatar.jpg',
         profile_image='https://example.com/valid-url-but-longer-than-1024-chars' + 'x' * 1024,
     )
-    account = {'name': 'foo', 'json_metadata': json.dumps(dict(profile=raw_profile))}
+    ignore_prof = dict(
+        name='Ignore me -- missing version:2!',
+    )
+    account = {'name': 'foo', 'json_metadata': json.dumps(dict(profile=raw_profile)),
+               'posting_json_metadata': json.dumps(dict(profile=ignore_prof))}
 
     safe_profile = safe_profile_metadata(account)
     assert safe_profile['name'] == 'NameIsTooBigByOne...'

pip install -e .[test]
parse_log_pytest
Pipfile
pytest pytest-cov pytest-pylint pytest-asyncio pytest-console-scripts
apt-get update apt-get install -y gcc
3.9
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
aiocache==0.12.3
aiohappyeyeballs==2.6.1
aiohttp==3.11.14
aiopg @ https://github.com/aio-libs/aiopg/tarball/862fff97e4ae465333451a4af2a838bfaa3dd0bc#sha256=d7aca3fab28810b54b2e74c089a9bd498ffde54b3f94c867a146da2464654393
aiosignal==1.3.2
apply_defaults==0.1.6
astroid==3.3.9
async-timeout==5.0.1
attrs==25.3.0
certifi==2025.1.31
ConfigArgParse==1.7
coverage==7.8.0
dateparser==1.2.1
dill==0.3.9
exceptiongroup==1.2.2
frozenlist==1.5.0
funcsigs==1.0.2
funcy==2.0
future==1.0.0
git-pylint-commit-hook==2.6.1
greenlet==3.1.1
-e git+https://github.com/steemit/hivemind.git@a50ffb074b422956f9ccf79fb49eb0a8969b494e#egg=hivemind
humanize==4.12.2
idna==3.10
importlib_metadata==8.6.1
iniconfig==2.1.0
isort==6.0.1
Jinja2==3.1.6
jsonrpcserver==4.0.1
jsonschema==2.6.0
MarkupSafe==3.0.2
maya==0.6.1
mccabe==0.7.0
multidict==6.2.0
packaging==24.2
pdoc==15.0.1
pendulum==3.0.0
pep8==1.7.1
pipfile==0.0.2
platformdirs==4.3.7
pluggy==1.5.0
propcache==0.3.1
psycopg2-binary==2.9.10
Pygments==2.19.1
pylint==3.3.6
pytest==8.3.5
pytest-asyncio==0.26.0
pytest-console-scripts==1.4.1
pytest-cov==6.0.0
pytest-pylint==0.21.0
python-dateutil==2.9.0.post0
pytz==2025.2
regex==2024.11.6
six==1.17.0
snaptime==0.2.4
SQLAlchemy==2.0.40
time-machine==2.16.0
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
tomli==2.2.1
tomlkit==0.13.2
toolz==1.0.0
typing_extensions==4.13.0
tzdata==2025.2
tzlocal==5.3.1
ujson==5.10.0
urllib3==2.3.0
yapf==0.43.0
yarl==1.18.3
zipp==3.21.0

name: hivemind
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - pipfile=0.0.2=py_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - aiocache==0.12.3
      - aiohappyeyeballs==2.6.1
      - aiohttp==3.11.14
      - aiopg==0.15.0
      - aiosignal==1.3.2
      - apply-defaults==0.1.6
      - astroid==3.3.9
      - async-timeout==5.0.1
      - attrs==25.3.0
      - certifi==2025.1.31
      - configargparse==1.7
      - coverage==7.8.0
      - dateparser==1.2.1
      - dill==0.3.9
      - exceptiongroup==1.2.2
      - frozenlist==1.5.0
      - funcsigs==1.0.2
      - funcy==2.0
      - future==1.0.0
      - git-pylint-commit-hook==2.6.1
      - greenlet==3.1.1
      - humanize==4.12.2
      - idna==3.10
      - importlib-metadata==8.6.1
      - iniconfig==2.1.0
      - isort==6.0.1
      - jinja2==3.1.6
      - jsonrpcserver==4.0.1
      - jsonschema==2.6.0
      - markupsafe==3.0.2
      - maya==0.6.1
      - mccabe==0.7.0
      - multidict==6.2.0
      - packaging==24.2
      - pdoc==15.0.1
      - pendulum==3.0.0
      - pep8==1.7.1
      - platformdirs==4.3.7
      - pluggy==1.5.0
      - propcache==0.3.1
      - psycopg2-binary==2.9.10
      - pygments==2.19.1
      - pylint==3.3.6
      - pytest==8.3.5
      - pytest-asyncio==0.26.0
      - pytest-console-scripts==1.4.1
      - pytest-cov==6.0.0
      - pytest-pylint==0.21.0
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - regex==2024.11.6
      - six==1.17.0
      - snaptime==0.2.4
      - sqlalchemy==2.0.40
      - time-machine==2.16.0
      - tomli==2.2.1
      - tomlkit==0.13.2
      - toolz==1.0.0
      - typing-extensions==4.13.0
      - tzdata==2025.2
      - tzlocal==5.3.1
      - ujson==5.10.0
      - urllib3==2.3.0
      - yapf==0.43.0
      - yarl==1.18.3
      - zipp==3.21.0
prefix: /opt/conda/envs/hivemind

tests/utils/test_utils_account.py::test_valid_account
tests/utils/test_utils_account.py::test_invalid_account
hive/utils/account.py hive/indexer/accounts.py
hive/utils/account.py hive/indexer/accounts.py