diff --git a/README.md b/README.md
index 8b8e86d..995826f 100644
--- a/README.md
+++ b/README.md
@@ -148,6 +148,16 @@ following change:
 
 Note that this would cause a **`SyntaxError`** in earlier python versions.
 
+### trailing commas for `from` imports
+
+```diff
+ from os import (
+     path,
+-    makedirs
++    makedirs,
+ )
+```
+
 ### unhug trailing paren
 
 ```diff
diff --git a/add_trailing_comma.py b/add_trailing_comma.py
index a80c492..b13c968 100644
--- a/add_trailing_comma.py
+++ b/add_trailing_comma.py
@@ -64,6 +64,7 @@ class FindNodes(ast.NodeVisitor):
         self.funcs = {}
         self.literals = {}
         self.tuples = {}
+        self.imports = set()
 
     def _visit_literal(self, node, key='elts'):
         if getattr(node, key):
@@ -143,6 +144,10 @@ class FindNodes(ast.NodeVisitor):
 
         self.generic_visit(node)
 
+    def visit_ImportFrom(self, node):
+        self.imports.add(Offset(node.lineno, node.col_offset))
+        self.generic_visit(node)
+
 
 def _find_simple(first_brace, tokens):
     brace_stack = [first_brace]
@@ -227,6 +232,18 @@ def _find_tuple(i, tokens):
     return _find_simple(i, tokens)
 
 
+def _find_import(i, tokens):
+    # progress forwards until we find either a `(` or a newline
+    for i in range(i, len(tokens)):
+        token = tokens[i]
+        if token.name == 'NEWLINE':
+            return
+        elif token.name == 'OP' and token.src == '(':
+            return _find_simple(i, tokens)
+    else:
+        raise AssertionError('Past end?')
+
+
 def _fix_brace(fix_data, add_comma, tokens):
     first_brace, last_brace = fix_data.braces
 
@@ -346,6 +363,11 @@ def _fix_src(contents_text, py35_plus, py36_plus):
         # Handle parenthesized things, unhug of tuples, and comprehensions
         elif token.src in START_BRACES:
             fixes.append((False, _find_simple(i, tokens)))
+        elif key in visitor.imports:
+            # some imports do not have parens
+            fix = _find_import(i, tokens)
+            if fix:
+                fixes.append((True, fix))
 
         for add_comma, fix_data in fixes:
             if fix_data is not None:

Doesn't add trailing commas to imports
I would expect this to add trailing commas to multiple imports:

```python
from foo import (
    bar,
    baz,
)
```
diff --git a/tests/add_trailing_comma_test.py b/tests/add_trailing_comma_test.py
index bc1152b..d02d9d9 100644
--- a/tests/add_trailing_comma_test.py
+++ b/tests/add_trailing_comma_test.py
@@ -684,6 +684,72 @@ def test_fix_trailing_brace(src, expected):
     assert _fix_src(src, py35_plus=False, py36_plus=False) == expected
 
 
+@pytest.mark.parametrize(
+    'src',
+    (
+        'from os import path, makedirs\n',
+        'from os import (path, makedirs)\n',
+        'from os import (\n'
+        '    path,\n'
+        '    makedirs,\n'
+        ')',
+    ),
+)
+def test_fix_from_import_noop(src):
+    assert _fix_src(src, py35_plus=False, py36_plus=False) == src
+
+
+@pytest.mark.parametrize(
+    ('src', 'expected'),
+    (
+        (
+            'from os import (\n'
+            '    makedirs,\n'
+            '    path\n'
+            ')',
+            'from os import (\n'
+            '    makedirs,\n'
+            '    path,\n'
+            ')',
+        ),
+        (
+            'from os import \\\n'
+            '   (\n'
+            '        path,\n'
+            '        makedirs\n'
+            '   )\n',
+            'from os import \\\n'
+            '   (\n'
+            '        path,\n'
+            '        makedirs,\n'
+            '   )\n',
+        ),
+        (
+            'from os import (\n'
+            '    makedirs,\n'
+            '    path,\n'
+            '    )',
+            'from os import (\n'
+            '    makedirs,\n'
+            '    path,\n'
+            ')',
+        ),
+        (
+            'if True:\n'
+            '    from os import (\n'
+            '        makedirs\n'
+            '    )',
+            'if True:\n'
+            '    from os import (\n'
+            '        makedirs,\n'
+            '    )',
+        ),
+    ),
+)
+def test_fix_from_import(src, expected):
+    assert _fix_src(src, py35_plus=False, py36_plus=False) == expected
+
+
 def test_main_trivial():
     assert main(()) == 0
 

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest numpy>=1.16.0 pandas>=1.0.0
apt-get update apt-get install -y gcc
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
-e git+https://github.com/asottile/add-trailing-comma.git@35ce9905dc9422e354c37fe5a941dc8198de4d56#egg=add_trailing_comma
exceptiongroup==1.2.2
iniconfig==2.1.0
numpy==2.0.2
packaging==24.2
pandas==2.2.3
pluggy==1.5.0
pytest==8.3.5
python-dateutil==2.9.0.post0
pytz==2025.2
six==1.17.0
tokenize_rt==6.1.0
tomli==2.2.1
tzdata==2025.2

name: add-trailing-comma
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
  - 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
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - exceptiongroup==1.2.2
      - iniconfig==2.1.0
      - numpy==2.0.2
      - packaging==24.2
      - pandas==2.2.3
      - pluggy==1.5.0
      - pytest==8.3.5
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - six==1.17.0
      - tokenize-rt==6.1.0
      - tomli==2.2.1
      - tzdata==2025.2
prefix: /opt/conda/envs/add-trailing-comma

tests/add_trailing_comma_test.py::test_fix_from_import[from tests/add_trailing_comma_test.py::test_fix_from_import[if
tests/add_trailing_comma_test.py::test_fixes_literals[x tests/add_trailing_comma_test.py::test_fixes_py35_plus_literals[x tests/add_trailing_comma_test.py::test_fix_unhugs[x tests/add_trailing_comma_test.py::test_fixes_calls[(\n
tests/add_trailing_comma_test.py::test_fix_calls_noops[x tests/add_trailing_comma_test.py::test_fix_calls_noops[x(1)] tests/add_trailing_comma_test.py::test_fix_calls_noops[tuple(\n tests/add_trailing_comma_test.py::test_fix_calls_noops[x(\n tests/add_trailing_comma_test.py::test_fix_calls_noops[x((\n tests/add_trailing_comma_test.py::test_fix_calls_noops[(\n tests/add_trailing_comma_test.py::test_py35_plus_rewrite tests/add_trailing_comma_test.py::test_fixes_calls[x(\n tests/add_trailing_comma_test.py::test_fixes_calls[foo()(\n tests/add_trailing_comma_test.py::test_fixes_calls[x({}).y(\n tests/add_trailing_comma_test.py::test_noop_literals[(1, tests/add_trailing_comma_test.py::test_noop_literals[[1, tests/add_trailing_comma_test.py::test_noop_literals[{1, tests/add_trailing_comma_test.py::test_noop_literals[{1: tests/add_trailing_comma_test.py::test_noop_literals[if tests/add_trailing_comma_test.py::test_noop_tuple_literal_without_braces tests/add_trailing_comma_test.py::test_noop_function_defs[def tests/add_trailing_comma_test.py::test_fixes_defs[def tests/add_trailing_comma_test.py::test_fixes_defs_py36_plus[def tests/add_trailing_comma_test.py::test_noop_unhugs[f(x, tests/add_trailing_comma_test.py::test_noop_unhugs[f(\n tests/add_trailing_comma_test.py::test_noop_unhugs[f((\n tests/add_trailing_comma_test.py::test_noop_unhugs[f([\n tests/add_trailing_comma_test.py::test_noop_unhugs[textwrap.dedent("""\n tests/add_trailing_comma_test.py::test_fix_unhugs[f(\n tests/add_trailing_comma_test.py::test_fix_unhugs[f(a,\n tests/add_trailing_comma_test.py::test_fix_unhugs[def tests/add_trailing_comma_test.py::test_fix_unhugs[with tests/add_trailing_comma_test.py::test_fix_unhugs[if tests/add_trailing_comma_test.py::test_fix_unhugs[{'foo': tests/add_trailing_comma_test.py::test_fix_unhugs[f(g(\n tests/add_trailing_comma_test.py::test_fix_unhugs[{"foo": tests/add_trailing_comma_test.py::test_fix_unhugs[x("foo", tests/add_trailing_comma_test.py::test_fix_unhugs[x("foo"\n tests/add_trailing_comma_test.py::test_fix_unhugs[[a()\n tests/add_trailing_comma_test.py::test_fix_unhugs_py3_only[def tests/add_trailing_comma_test.py::test_noop_trailing_brace[[]] tests/add_trailing_comma_test.py::test_noop_trailing_brace[x tests/add_trailing_comma_test.py::test_noop_trailing_brace[y tests/add_trailing_comma_test.py::test_noop_trailing_brace[foo.\\\n tests/add_trailing_comma_test.py::test_fix_trailing_brace[x tests/add_trailing_comma_test.py::test_fix_from_import_noop[from tests/add_trailing_comma_test.py::test_main_trivial tests/add_trailing_comma_test.py::test_main_noop tests/add_trailing_comma_test.py::test_main_changes_a_file tests/add_trailing_comma_test.py::test_main_preserves_line_endings tests/add_trailing_comma_test.py::test_main_syntax_error tests/add_trailing_comma_test.py::test_main_non_utf8_bytes tests/add_trailing_comma_test.py::test_main_py35_plus_argument_star_args tests/add_trailing_comma_test.py::test_main_py35_plus_argument_star_star_kwargs tests/add_trailing_comma_test.py::test_main_py36_plus_implies_py35_plus tests/add_trailing_comma_test.py::test_main_py36_plus_function_trailing_commas
add_trailing_comma.py README.md
add_trailing_comma.py README.md