PlainTables
Copy any web table to Excel, Google Sheets, CSV or Markdown in one click. No row limits, no account, no tracking.
Chrome Web Store link coming soon Add PlainTables to Firefox — free
What it does
- Click the icon to see every table on the page (hover to highlight it)
- Copy for Excel / Google Sheets (paste keeps rows and columns), download CSV or a real .xlsx, or copy Markdown
- Handles merged cells (colspan/rowspan) and modern div-based data grids (ARIA grids); skips hidden and layout tables
- Keeps numbers as numbers in XLSX (1,234.50 / $9 / 12% become real numbers)
- CSV export guards against spreadsheet formula injection
- Reads only the tab you click it on (activeTab); nothing leaves your browser
Price
Free and unlimited. A planned optional Pro upgrade ($9 one-time, no subscription) adds collecting a paginated table across pages, choosing columns, and all tables into one XLSX workbook. Everything in the list above stays free.
Privacy
No analytics, no ads, no network requests. Permissions: activeTab and scripting only. Site privacy policy.
Screenshots




PlainTables is built with AI assistance and maintained by an independent developer. It is open source (MIT). Try the related free web tool: HTML table to CSV / TSV / Markdown. Guide: How to convert an HTML table to CSV in Python. Guide: How to convert JSON to CSV in Python. Guide: How to convert CSV to JSON in Python. Guide: How to convert XML to CSV in Python. Guide: How to import a CSV into SQLite with Python. Guide: How to split a CSV into multiple files in Python. Guide: How to merge CSV files in Python. Guide: How to compare two lists in Excel. Guide: How to remove duplicate lines (Linux, bash, Python). Guide: How to export an HTML table to Excel with JavaScript. Guide: How to copy a table from a website to Excel or Google Sheets. Guide: pandas pivot: Index contains duplicate entries, cannot reshape (tested). Guide: AttributeError: _ARRAY_API not found / numpy.dtype size changed (pandas, NumPy 2). Guide: MemoryError: Unable to allocate X GiB for an array (NumPy / pandas, tested). Guide: How to suppress pandas warnings (tested on pandas 2 and 3). Guide: pandas apply errors='coerce': skip errors in apply (tested). Guide: pandas TypeError: unhashable type: 'list' (drop_duplicates, groupby). Guide: pandas TypeError: unhashable type: 'numpy.ndarray' (tested). Guide: pandas TypeError: unhashable type: 'dict' (groupby, nunique, merge). Guide: pandas 3.0 breaking changes, measured against pandas 2.3. Guide: pandas AttributeError: can't set attribute (itertuples, shape). Guide: pandas pivot_table KeyError (causes and fixes). Guide: pandas apply KeyError (missing axis=1). Guide: module 'numpy' has no attribute 'int' / 'float' / 'bool8' / 'float_'. Guide: NumPy RuntimeWarning: mean of empty slice, overflow, divide by zero (tested). Guide: ValueError: assignment destination is read-only (NumPy, pandas 3, PIL, tested). Guide: numpy.linalg.LinAlgError: Singular matrix (tested causes and fixes). Guide: NumPy broadcasting error: operands could not be broadcast together with shapes (tested). Guide: numpy AxisError: axis 1 is out of bounds for array of dimension 1 (tested). Guide: matplotlib not showing plot: plt.show() does nothing (tested). Guide: How to suppress matplotlib warnings (and findfont messages), tested. Guide: sklearn ConvergenceWarning: lbfgs failed to converge (tested). Guide: How to suppress scikit-learn warnings (ConvergenceWarning, UndefinedMetricWarning), tested. Guide: Liblinear failed to converge, increase the number of iterations (tested). Guide: ValueError: continuous is not supported in scikit-learn (tested). Guide: ValueError: Unknown label type: continuous in scikit-learn (tested). Guide: OSError: [Errno 39] Directory not empty in Python (tested). Guide: OSError: [Errno 36] File name too long in Python (tested). Guide: OSError: [Errno 28] No space left on device in Python (tested). Guide: SQLAlchemy IntegrityError: UNIQUE constraint failed (tested). Guide: SQLAlchemy DetachedInstanceError: not bound to a Session (tested). Guide: SQLAlchemy OperationalError: no such table (tested). Guide: SQLAlchemy MissingGreenlet: greenlet_spawn has not been called (tested). Guide: openpyxl IllegalCharacterError: cannot be used in worksheets (tested). Guide: openpyxl InvalidFileException: does not support file format (tested). Guide: openpyxl ValueError: Cannot convert to Excel (tested). Guide: matplotlib savefig: dpi, size, transparent, blank image (tested). Guide: matplotlib errorbar: no line, asymmetric, bar chart, colours (tested). Guide: numpy errstate: ignore or raise divide by zero (tested). Guide: numpy.dtype size changed, may indicate binary incompatibility (tested). Guide: NumPy 2 breaking changes: same code on 1.26 vs 2.x (tested). Guide: matplotlib legend not showing: No artists with labels (tested). Guide: matplotlib axis labels not showing (tested fixes). Guide: pip install numpy: error metadata-generation-failed (tested). Guide: MatplotlibDeprecationWarning: fix, silence, find it (tested). Guide: numpy polyfit RankWarning: Polyfit may be poorly conditioned (tested). Guide: PyInstaller ModuleNotFoundError: No module named (tested). Guide: numpy floating point errors: 0.1 + 0.2, isclose, arange (tested). Guide: uv sync errors: no pyproject, no solution, --locked, requires-python (tested). Guide: mypy error: Need type annotation for (tested). Guide: mypy Incompatible types in assignment (tested). Guide: mypy Duplicate module named (tested). Guide: mypy Statement is unreachable (tested). Guide: seaborn errorbar options: sd, ci, se, pi (tested). Guide: cv2.error (-215:Assertion failed) !_src.empty() (tested). Guide: mypy Skipping analyzing / Library stubs not installed (tested). Guide: cv2.imshow error: The function is not implemented (tested). Guide: Plotly ValueError: Mime type rendering requires nbformat>=4.2.0 (tested). Guide: sklearn error_score='raise' and FitFailedWarning (tested). Guide: Plotly error bars: error_y in px and graph_objects (tested). Guide: Plotly error bands: shaded confidence interval (tested). Guide: StreamlitAPIException: duplicate key, session_state cannot be modified (tested). Guide: Streamlit error message: st.error vs st.exception vs st.stop (tested). Guide: scipy minimize error: success False, precision loss, maxiter (tested). Guide: SciPy standard error: scipy.stats.sem, ddof, NaN and regression (tested). Guide: SciPy error function: erf, erfc (complementary) and erfinv (inverse), tested. Guide: scipy install error: metadata-generation-failed, Unknown compiler(s) (tested). Guide: Error: jupyter nbconvert is not installed / jupyter-nbconvert not found (tested). Guide: Jupyter notebook kernel not found: NoSuchKernel, ipykernel install (tested). Guide: Error propagation in Python with SciPy: linear, Monte Carlo, uncertainties (tested). Guide: Jupyter notebook kernel keeps dying: DeadKernelError, crash vs out of memory (tested). Guide: Docker Python ModuleNotFoundError: No module named in a container (tested). Guide: Docker pip error: externally-managed-environment in a Dockerfile (tested). Guide: Docker Python exec format error: wrong architecture or missing shebang (tested). Guide: Jupyter error 403 Forbidden and '_xsrf' argument missing from POST (tested). Guide: Jupyter "Error unpacking user from cookie" and "Clearing invalid/expired login cookie" (tested). Guide: Jupyter "Error Starting Kernel" (500 Unhandled error): three causes, tested. Guide: Jupyter install "error: externally-managed-environment" on Debian/Ubuntu (tested). Guide: gunicorn "error: unrecognized arguments" (--host, --port, --worker) (tested). Guide: gunicorn access log format: --access-logformat examples (tested). Guide: gunicorn 500 Internal Server Error: where the traceback is (tested). Guide: pip install SyntaxError: invalid syntax (tested). Guide: pip install error: subprocess-exited-with-error, exit code: 1 (tested). Guide: pip install tensorflow: No matching distribution found (tested). Guide: pip install torch: No matching distribution found (tested). Guide: TensorFlow Keras errors after upgrading to Keras 3 (tested). Guide: AssertionError: Torch not compiled with CUDA enabled (tested). Guide: PyTorch RuntimeError: Numpy is not available (tested). Guide: TensorFlow "triggered tf.function retracing" warning (tested). Guide: torch.accelerator error: Cannot access accelerator device (tested). Guide: TensorFlow ResourceExhaustedError: OOM when allocating tensor (tested). Guide: Keras ImageDataGenerator deprecated: replacement (tested). Guide: No module named 'keras.wrappers.scikit_learn' (tested fix). Guide: ModuleNotFoundError: No module named 'torch' (tested fix). Guide: Keras "Invalid filepath extension for saving" (tested fix). Guide: module 'tensorflow' has no attribute 'Session' (tested fix). Guide: Keras 3: AttributeError module 'keras' has no attribute (tested). Guide: pip install torch "error: externally-managed-environment" (tested). Guide: TensorFlow import error with NumPy 2: _ARRAY_API not found (tested). Guide: "A module that was compiled using NumPy 1.x cannot be run in NumPy 2" (tested). Guide: ImportError: numpy.core.multiarray failed to import (cv2, tested). Guide: import sklearn: _ARRAY_API not found with NumPy 2 (tested). Guide: SciPy and NumPy 2 compatibility (tested). Guide: Matplotlib and NumPy 2 compatibility (tested). Guide: ImportError: Numba needs NumPy 2.2 or less (tested). Guide: PyArrow and NumPy 2 compatibility (tested). Guide: statsmodels and NumPy 2 compatibility (tested). Guide: gensim: cannot import name 'triu' from 'scipy.linalg' (tested). Guide: shap and NumPy 2 compatibility (tested). Guide: spaCy and NumPy 2 compatibility (tested). Guide: PyTables and NumPy 2 compatibility (tested). Guide: astropy and NumPy 2 compatibility (tested). Guide: NumPy 2.4: module 'numpy' has no attribute 'in1d' / 'trapz' (tested). Guide: scikit-learn-extra + NumPy 2: dtype size changed (tested fixes). Guide: librosa + NumPy 2: works; the real error is pkg_resources (tested). Guide: TensorBoard: No module named 'pkg_resources' (tested fix). Guide: cx_Oracle install: No module named 'pkg_resources' (tested fix). Guide: selenium-wire: No module named 'pkg_resources' / blinker._saferef (tested). Guide: openai CLIP: No module named 'pkg_resources' on pip install (tested). Guide: uv: No module named 'pkg_resources' when building a package (tested). Guide: Poetry: No module named 'pkg_resources' (PEP517 build failed, tested). Guide: pipenv: No module named 'pkg_resources' (hidden lock error, tested). Guide: docker build: No module named 'pkg_resources' (tested Dockerfile fix). Guide: Ansible pip module: No module named 'pkg_resources' (tested fix). Guide: import fs: No module named 'pkg_resources' (PyFilesystem2, tested). Guide: UserWarning: pkg_resources is deprecated as an API (tested fixes). Guide: pygame: pkg_resources is deprecated as an API (tested fix). Guide: Home Assistant: No module named 'pkg_resources' (tested fix). Guide: Odoo: No module named 'pkg_resources' (tested fix). Guide: Stable Diffusion WebUI: No module named 'pkg_resources' (tested). Guide: Trac 1.6: No module named 'pkg_resources' (tested fix). Guide: supervisord: No module named 'pkg_resources' (tested fix). Guide: deluge 2.2.0: No module named 'pkg_resources' (tested fix). Guide: paster (PasteScript): No module named 'pkg_resources' (tested). Guide: jenkins-jobs: No jjb.cli.subcommands extensions found (fix). Guide: mim install: No module named 'pkg_resources' (tested fix). Guide: pyqt5-tools designer: No module named 'pkg_resources' (fix). Guide: scrapyd RunnerError: No module named 'pkg_resources' (fix). Guide: pyqt6-tools designer: No module named 'pkg_resources' (fix). Guide: opsdroid: No module named 'pkg_resources' (fix). Guide: nameko: No module named 'pkg_resources' (fix). Guide: python -m eel: No module named 'pkg_resources' (fix). Guide: Open Interpreter: No module named 'pkg_resources' (fix). Guide: wfuzz: No module named 'pkg_resources' (and pip install fails). Guide: nnictl: No module named 'pkg_resources' (NNI fix). Guide: embedchain ec: No module named 'pkg_resources' (fix). Guide: import yolov5: No module named 'pkg_resources' (fix). Guide: torch.load: Weights only load failed (fix). Guide: ultralytics YOLO: Weights only load failed (fix). Guide: torchaudio has no attribute 'AudioMetaData' (fix). Guide: torchaudio has no attribute 'info' (fix). Guide: Could not load libtorchcodec (fix). Guide: No module named 'torchaudio.backend' (fix). Guide: No module named 'torchaudio.io' (fix). Guide: torchaudio: Failed to intialize FFmpeg extension (fix). Guide: torchaudio sox_effects: libsox.so not found (fix). Guide: torchaudio.utils has no attribute 'download_asset' (fix). Guide: CTC Decoder suit requires flashlight-text package (fix). Guide: No module named 'torchaudio.kaldi_io' (fix). Guide: torchaudio libtorchaudio.so undefined symbol (fix). Guide: RuntimeError: operator torchvision::nms does not exist (fix). Guide: module 'torchvision.transforms' has no attribute 'v2' (fix). Guide: module 'torchvision' has no attribute 'disable_beta_transforms_warning' (fix). Guide: cannot enable executable stack as shared object requires: Invalid argument (fix). Guide: module 'torchvision.transforms' has no attribute 'Scale' (fix). Guide: torch: ModuleNotFoundError: No module named 'pkg_resources' (fix). Guide: onnxruntime: cannot enable executable stack as shared object requires (fix). Guide: partially initialized module 'torchvision' has no attribute 'extension' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'torchaudio' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'av' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'sqlalchemy' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'gguf' (fix). Guide: ComfyUI-Manager: Failed to initialize: Bad git executable (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'insightface' (fix). Guide: ComfyUI-Manager: ModuleNotFoundError: No module named 'comfy' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'yaml' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'ultralytics' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'comfy.options' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'soundfile' (fix). Guide: ComfyUI --use-sage-attention: No module named 'triton' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'cv2' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'onnxruntime' (fix). Guide: ComfyUI: module 'onnxruntime' has no attribute 'InferenceSession' (fix). Guide: ComfyUI-Manager cm-cli: ModuleNotFoundError: No module named 'utils' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'torchsde' (fix). Guide: ComfyUI --directml: No module named 'torch_directml' (fix). Guide: pip install flash-attn: No module named 'torch' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'transformers' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'tqdm' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'requests' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'safetensors' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'einops' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'aiohttp' (fix). Guide: ComfyUI: ModuleNotFoundError: No module named 'PIL' (fix). Guide: ComfyUI: No module named 'numpy' or 'numpy.dtypes' (fix). Guide: ComfyUI-Manager: No module named 'toml' (IMPORT FAILED fix). Guide: ComfyUI-Manager: No module named 'git' (IMPORT FAILED fix).
Frequently asked questions
Is PlainTables a Table Capture alternative?
Yes, it does the same core job: export HTML tables from the current page to spreadsheet formats. At the time of our research Table Capture's free tier had a row cap (around 250 rows) with a yearly Pro plan; PlainTables' free version has no row limit.
Can I paste into Google Sheets or Excel?
Yes. “Copy for Excel/Sheets” copies tab-separated data, so rows and columns land in the right cells. You can also download CSV or XLSX.
Does it handle merged cells?
Yes. colspan and rowspan are expanded into a rectangular grid, and ARIA grid layouts built from divs are detected too.
Is my data uploaded anywhere?
No. The extraction runs in your tab and the conversion runs in the popup. PlainTables makes no network requests.
Can I try it without installing?
Yes — paste a table's HTML into the free HTML table to CSV converter on this site.