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), supports passwordless 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)
amex American Express IL אמריקן אקספרס Credit Card Mobile REST API (ring.americanexpress.co.il, id + card6Digits + password)
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.2.1

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.2.1
File Size Uploaded Provenance
israeli_finance_scrapers-0.2.1.tar.gz 88.5 kB With provenance Details

Built distribution (wheel)

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

Total release size: 157.0 kB

Release files / israeli_finance_scrapers-0.2.1.tar.gz

Download URL israeli_finance_scrapers-0.2.1.tar.gz
Size 88.5 kB
Tags Source
SHA-256 checksum
How to use checksums
deefde76e6efa5d330a56762552bd254a69539d0fba5868f435ed911adaac8c8
BLAKE2b-256 checksum
How to use checksums
30f1f68e4c831b42d606655c932b917f610ee0a6c7398e11cf466b192cbb9b48
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.2.1-py3-none-any.whl

Download URL israeli_finance_scrapers-0.2.1-py3-none-any.whl
Size 68.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
663f1311dec800b3f78604ca14c2f340645275cd938daf6932b1bf1e5d46aedb
BLAKE2b-256 checksum
How to use checksums
93acd18bd17499189e2ea135f47889450695acae0236bf2ba8df653f6d76687b
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.2.1

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