Skip to main content

israeli-finance-scrapers

PyPI version Python versions License

Unified, modern async Python library to scrape Israeli banks, credit cards, and pension providers.

Browserless First: Wherever possible, scrapers connect directly to mobile and web REST/GraphQL APIs with pure HTTP (httpx), requiring no heavy headless browsers (no Puppeteer, no Chromium, no Playwright).


Supported Providers

Provider Key Institution Hebrew Name Category Auth Flow
onezero One Zero Bank וואן זירו Bank GraphQL API + mTLS, SMS OTP + 10-year otpLongTermToken (idToken)
pepper Pepper Bank פפר Bank Transmit Security v2 + GraphQL (phoneNumber + password), SMS OTP + persistent otpLongTermToken
visa_cal Visa Cal ויזה כאל Credit Card Mobile REST API (username + password OR id + card4Digits SMS OTP) + persistent otpLongTermToken (bioLogin)
max Max (Leumi Card) מקס Credit Card Mobile REST API (lcapi, username + password) + persistent device fingerprint (otpLongTermToken)
isracard Isracard ישראכרט Credit Card Mobile REST API (ring.isracard.co.il, id + card6Digits + password OR SMS OTP) + persistent otpLongTermToken
amex American Express IL אמריקן אקספרס Credit Card Mobile REST API (ring.americanexpress.co.il, id + card6Digits + password OR SMS OTP) + persistent otpLongTermToken
haphoenix The Phoenix הפניקס Pension & Savings SMS OTP (id + phoneNumber) + 6-month otpLongTermToken
migdal Migdal מגדל Pension & Savings SMS OTP (id + phoneNumber) + AES-CBC otpLongTermToken

(Additional bank and card providers are actively being added! PRs welcome.)


Installation

Using pip:

pip install israeli-finance-scrapers

Using uv:

uv add israeli-finance-scrapers

(Requires Python 3.11+)


Quickstart

1. Scraping Credit Cards (e.g. Visa Cal)

import asyncio
from israeli_finance_scrapers import create_scraper


async def main():
    scraper = create_scraper(
        provider="visa_cal",
        credentials={
            "username": "your_username",
            "password": "your_password",
            # Or use bioLogin token on subsequent runs:
            # "otpLongTermToken": "saved_hash",
        },
    )

    result = await scraper.scrape()

    if not result.success:
        print(f"Failed: {result.error_type} - {result.error_message}")
        return

    for account in result.accounts:
        print(f"💳 Card ending in {account.account_number}")
        print(f"   Balance: ₪{account.balance}")
        print(f"   Credit Limit: ₪{account.credit_limit}")
        print(f"   Transactions: {len(account.txns)}")

        for txn in account.txns[:5]:
            print(f"   - {txn.date}: {txn.description} (₪{txn.charged_amount})")

    # Save the token to skip username/password next time!
    if result.long_term_token:
        print(f"🔑 Saved long-term token: {result.long_term_token}")


asyncio.run(main())

2. Scraping Banks (e.g. One Zero)

import asyncio
from israeli_finance_scrapers import create_scraper


async def prompt_otp() -> str:
    return input("Enter the SMS verification code: ").strip()


async def main():
    scraper = create_scraper(
        provider="onezero",
        credentials={
            "phoneNumber": "0501234567",
            # Or use 10-year idToken on subsequent runs:
            # "otpLongTermToken": "saved_id_token",
        },
    )
    scraper.on_otp_request = prompt_otp

    result = await scraper.scrape()

    for account in result.accounts:
        print(f"🏦 Account: {account.account_number} (Balance: ₪{account.balance})")
        for txn in account.txns[:5]:
            print(f"   - {txn.date}: {txn.description} (₪{txn.charged_amount})")


asyncio.run(main())

3. Scraping Pensions & Education Funds (e.g. Phoenix or Migdal)

import asyncio
from israeli_finance_scrapers import create_scraper


async def prompt_otp() -> str:
    return input("Enter SMS OTP code: ").strip()


async def main():
    scraper = create_scraper(
        provider="haphoenix",  # or "migdal"
        credentials={
            "id": "123456789",
            "phoneNumber": "0501234567",
        },
    )
    scraper.on_otp_request = prompt_otp

    result = await scraper.scrape()

    print(f"💰 Total Balance: ₪{result.portfolio_summary.total_balance:,.2f}")
    for fund in result.funds:
        print(f"📂 {fund.name} ({fund.product_type}): ₪{fund.balance:,.2f}")


asyncio.run(main())

Unified JSON Schema

Every scraper returns a ScrapingResult (.to_dict() / .to_json()):

{
  "success": true,
  "provider": "visa_cal",
  "accounts": [
    {
      "account_number": "1234",
      "account_type": "credit_card",
      "balance": -1250.0,
      "credit_limit": 15000.0,
      "open_to_buy": 12000.0,
      "currency": "ILS",
      "txns": [
        {
          "identifier": "999",
          "date": "2026-10-24",
          "processed_date": null,
          "original_amount": 45.0,
          "original_currency": "ILS",
          "charged_amount": 45.0,
          "description": "Cafe Aroma",
          "status": "pending",
          "type": "normal"
        }
      ]
    }
  ],
  "funds": [],
  "portfolio_summary": null,
  "long_term_token": "hash_or_token"
}

License

This project is licensed under the Apache-2.0 License.

Metadata

Release files for israeli-finance-scrapers 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for israeli-finance-scrapers 0.5.0
File Size Uploaded Provenance
israeli_finance_scrapers-0.5.0.tar.gz 91.2 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for israeli-finance-scrapers 0.5.0
File Interpreter ABI Platform
israeli_finance_scrapers-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 161.7 kB

Release files / israeli_finance_scrapers-0.5.0.tar.gz

Download URL israeli_finance_scrapers-0.5.0.tar.gz
Size 91.2 kB
Tags Source
SHA-256 checksum
How to use checksums
bc791732dde5e6cd44220fbf593dfa7272ee605af047f68134875a0932e7dd22
BLAKE2b-256 checksum
How to use checksums
68ede1bbcb965305470f078ce4a8ea42ff5441db3cca280d12252ada8f7c7572
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / israeli_finance_scrapers-0.5.0-py3-none-any.whl

Download URL israeli_finance_scrapers-0.5.0-py3-none-any.whl
Size 70.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7b74208c0011fc88db3a4dbc86d7beae1d8f815758caec38a723841ea52bc3f4
BLAKE2b-256 checksum
How to use checksums
c88707258777215ab4a4114a867d5fc55fb7317e63e69df40e9a157cac44d0c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Security for israeli-finance-scrapers 0.5.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for israeli_finance_scrapers-0.5.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page