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.9.4

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.9.4
File Size Uploaded Provenance Actions
israeli_finance_scrapers-0.9.4.tar.gz 93.3 kB With provenance Details for israeli_finance_scrapers-0.9.4.tar.gz

Built distribution (wheel)

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

Total release size: 164.2 kB

Release files / israeli_finance_scrapers-0.9.4.tar.gz

Download URL israeli_finance_scrapers-0.9.4.tar.gz
Size 93.3 kB
Tags Source
SHA-256 checksum
How to use checksums
05abc5f695436a5c5a8e7aeef291a2f95608e58bba35b994aa7b13a75f72b359
BLAKE2b-256 checksum
How to use checksums
23afa7af65d7572575ea583971679cdeb7c858eece08f7611f23b444adab337e
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 Nov 2, 2026.

Transparency log

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

Download URL israeli_finance_scrapers-0.9.4-py3-none-any.whl
Size 70.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
976117189fd81371ee2f900ddedf42dc74bdeb758779c17982cc81d64a905841
BLAKE2b-256 checksum
How to use checksums
474b9eefa2679f7368d06ebaaf4023d235e5ea376aad4ff2a574e715352bedf8
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 Nov 2, 2026.

Transparency log

Security for israeli-finance-scrapers 0.9.4

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.9.4.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 Nov 2, 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