Last active
November 21, 2025 13:52
-
-
Save jfmlima/8f5e2a50b557c3a0345e217382c9d9d3 to your computer and use it in GitHub Desktop.
Convert JEFIT into Hevy compatible CSV
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| """ | |
| As multiple persons were requesting help I've decided to create this tool to help people migrate. | |
| https://workout-converter.fly.dev/ | |
| If you liked it, feel free to buy me a coffee. | |
| """ | |
| import pandas as pd | |
| # Read the input CSV file | |
| df_exercises = pd.read_csv("exercises.csv") | |
| df_sessions = pd.read_csv("sessions.csv") | |
| df = pd.merge(df_exercises, df_sessions, left_on='belongsession', right_on='_id', how='left', suffixes=('-E', '-S')) | |
| # Convert logs column into weights, reps and set order | |
| df['logs'] = df['logs'].str.split(',') | |
| df = df.explode('logs') | |
| df[['weight', 'reps']] = df['logs'].str.split('x', expand=True) | |
| df['set_order'] = df.groupby('ename').cumcount() + 1 | |
| # Convert to Hevy headers | |
| out = pd.DataFrame() | |
| out["Date"] = pd.to_datetime(df["mydate"]).apply(lambda x: x.isoformat()) | |
| out["Workout Name"] = '"Workout"' | |
| out["Duration"] = df["total_time"].map(lambda x: f'{x}s') | |
| out["Exercise Name"] = '"' + df["ename"] + '"' | |
| out["Set Order"] = df["set_order"] | |
| out["Weight"] = df["weight"] | |
| out["Reps"] = df["reps"] | |
| out["Distance"] = 0 | |
| out["Seconds"] = 0 | |
| out["Notes"] = '""' | |
| out["Workout Notes"] = '""' | |
| out["RPE"] = "" | |
| # Map the JEFIT to Hevy exercise names | |
| mapper = { | |
| '"Barbell Bench Press"': '"Bench Press (Barbell)"', | |
| '"Dumbbell Incline Bench Press"': '"Incline Bench Press (Dumbbell)"', | |
| '"Dumbbell Bench Press"': '"Bench Press (Dumbbell)"', | |
| '"Leverage Incline Chest Press"': '"Incline Bench Press (Barbell)"', | |
| '"Cable Cross-Over"': '"Cable Fly Crossovers"', | |
| '"EZ Bar Curl"': '"EZ Bar Biceps Curl"', | |
| '"Cable Rope Triceps Pushdown"': '"Triceps Rope Pushdown"', | |
| '"Dumbbell Concentration Curl"': '"Concentration Curl"', | |
| '"Dumbbell Spider Curl"': '"Spider Curl (Dumbbell)"', | |
| '"Barbell Seated Tricep Extension"': '"Triceps Extension (Barbell)"', | |
| '"Cable Reverse Grip Tricep Kickback"': '"Triceps Kickback (Cable)"', | |
| '"Barbell Bent-Over Row"': '"Bent Over Row (Barbell)"', | |
| '"Weighted Pull-Up"': '"Pull Up (Weighted)"', | |
| '"Barbell Upright Row"': '"Upright Row (Barbell)"', | |
| '"Dip"': '"Triceps Dip"', | |
| '"Dumbbell Seated Shoulder Press"': '"Shoulder Press (Dumbbell)"', | |
| '"EZ Bar Tricep Extension"': '"Triceps Extension (Barbell)"', | |
| '"Barbell Deep Squat"': '"Squat (Barbell)"', | |
| '"Barbell Deadlift"': '"Deadlift (Barbell)"', | |
| '"Barbell Stiff-Leg Deadlift"': '"Straight Leg Deadlift"', | |
| '"Leg Press"': '"Leg Press (Machine)"', | |
| '"Seated Leg Curl"': '"Seated Leg Curl (Machine)"', | |
| '"Leg Extension"': '"Leg Extension (Machine)"', | |
| '"Standing Calf Raise"': '"Seated Calf Raise"', | |
| '"Sit-Up"': '"Sit Up"', | |
| '"Pull-Up"': '"Pull Up"', | |
| '"Cable Seated Row"': '"Seated Cable Row - V Grip (Cable)"', | |
| '"Close Grip Front Lat Pulldown"': '"Lat Pulldown - Close Grip (Cable)"', | |
| '"Cable Rope Face Pull"': '"Face Pull"', | |
| '"Dumbbell One-Arm Row"': '"Dumbbell Row"', | |
| '"Dumbbell Lateral Raise"': '"Lateral Raise (Dumbbell)"', | |
| '"Barbell Front Squat"': '"Front Squat"', | |
| '"Barbell Romanian Deadlift From Deficit"': '"Romanian Deadlift (Barbell)"', | |
| '"Machine Leg Extension"': '"Leg Extension (Machine)"', | |
| '"Machine Leg Press"': '"Leg Press (Machine)"', | |
| '"Machine Seated Leg Curl"': '"Seated Leg Curl (Machine)"', | |
| '"Machine Calf Raise"': '"Calf Press (Machine)"', | |
| '"Cable Front Lat Pulldown (Close Grip)"': '""Lat Pulldown - Close Grip (Cable)"', | |
| '"Cable Rope Tricep Pushdown"': '"Triceps Rope Pushdown"', | |
| '"Cable Tricep Kickback (Reverse Grip)"': '"Triceps Kickback (Cable)"', | |
| '"Dumbbell Incline Fly"': '"Incline Chest Fly (Dumbbell)"', | |
| '"Barbell Preacher Curl"': '"Preacher Curl (Barbell)"', | |
| '"Cable Lat Pulldown (Wide Grip)"': '"Lat Pulldown (Cable)"', | |
| '"Hack Squat"': '"Hack Squat"', | |
| '"Machine Leg Curl"': '"Seated Leg Curl (Machine)"', | |
| '"Barbell Standing Calf Raise"': '"Standing Calf Raise (Barbell)"', | |
| '"Barbell Seated Calf Raise"': '"Seated Calf Raise"', | |
| '"Donkey Calf Raise"': '"Seated Calf Raise"', | |
| '"Machine Leg Curl (Prone)"': '"Seated Leg Curl (Machine)"', | |
| '"Machine Bench Press"': '"Bench Press (Barbell)"', | |
| '"Push-Up"': '"Push Up"', | |
| '"Resistance Band Row"': '"Bent Over Row (Band)"', | |
| '"Plank"': '"Plank"', | |
| '"Band Bicep Curl "': '"Bicep Curl (Suspension)"', | |
| '"Crunch"': '"Crunch"', | |
| '"Cable Tricep Pushdown (Rope)"': '"Triceps Rope Pushdown"', | |
| } | |
| out["Exercise Name"] = out["Exercise Name"].map(mapper) | |
| # Save the output to a CSV file | |
| out.to_csv('./output.csv', index=False) | |
Author
Hey, thanks for this script! I added some more exercises to the map and got rid of the "" for Hevy names (otherwise Hevy creates them as custom exercises instead of making the link.
mapper = {
'"Dumbbell Pullover"': 'Pullover (Dumbbell)',
'"T Bar Row"': 'T Bar Row',
'"Barbell Hip Thrust"': 'Hip Thrust (Barbell)',
'"Dumbbell Seated Side Lateral Raise"': 'Seated Lateral Raise (Dumbbell)',
'"Dumbbell Supine Cross Tricep Extension"': 'Single Arm Tricep Extension (Dumbbell)', # no better equivalent
'"Dumbbell Waiter Curls"': 'Hammer Curl (Dumbbell)', # no better equivalent
'"Cable Internal Rotation"': 'Cable Internal Rotation', # create custom
'"Cable External Rotation"': 'Cable External Rotation', # create custom
'"Machine Seated Calf Raise"': 'Seated Calf Raise',
'"Machine Single-Leg Extension "': 'Single Leg Extensions',
'"Machine Tricep Extension"': 'Triceps Extension (Machine)',
'"Dumbbell Tricep Extension"': 'Triceps Extension (Dumbbell)',
'"Dumbbell Alternating Hammer Curl"': 'Hammer Curl (Dumbbell)',
'"Barbell Squat"': 'Squat (Barbell)',
'"Dumbbell Alternating Incline Curl"': 'Seated Incline Curl (Dumbbell)',
'"Dumbbell Wrist Curl (Palms Up)"': 'Seated Palms Up Wrist Curl',
'"Cable High Pulley Tricep Extension"': 'Triceps Extension (Cable)',
'"Machine Incline Chest Press"': 'Incline Chest Press (Machine)',
'"Back Hyperextension"': 'Back Extension (Weighted Hyperextension)',
'"Machine Single-Leg Curl"': 'Seated Leg Curl (Machine)',
'"Cable One-Arm Tricep Pushdown (Reverse Grip)"': 'Single Arm Triceps Pushdown (Cable)',
'"Machine Hip Adduction"': 'Hip Adduction (Machine)',
'"Quadricep Stretch"': 'Stretching',
'"90/90 Hamstring Stretch"': 'Stretching',
'"Dumbbell One-Arm Front Raise"': 'Front Raise (Dumbbell)',
'"Barbell Bench Press"': 'Bench Press (Barbell)',
'"Dumbbell Incline Bench Press"': 'Incline Bench Press (Dumbbell)',
'"Dumbbell Bench Press"': 'Bench Press (Dumbbell)',
'"Dumbbell Incline Bench Row"': 'Chest Supported Incline Row (Dumbbell)',
'"Barbell Incline Bench Press"': 'Incline Bench Press (Barbell)',
'"Leverage Incline Chest Press"': 'Incline Bench Press (Barbell)',
'"Cable Cross-Over"': 'Cable Fly Crossovers',
'"EZ Bar Curl"': 'EZ Bar Biceps Curl',
'"Cable Rope Triceps Pushdown"': 'Triceps Rope Pushdown',
'"Dumbbell Concentration Curl"': 'Concentration Curl',
'"Dumbbell Spider Curl"': 'Spider Curl (Dumbbell)',
'"Barbell Seated Tricep Extension"': 'Triceps Extension (Barbell)',
'"Cable Reverse Grip Tricep Kickback"': 'Triceps Kickback (Cable)',
'"Barbell Bent-Over Row"': 'Bent Over Row (Barbell)',
'"Weighted Pull-Up"': 'Pull Up (Weighted)',
'"Barbell Upright Row"': 'Upright Row (Barbell)',
'"Dip"': 'Triceps Dip',
'"Dumbbell Seated Shoulder Press"': 'Shoulder Press (Dumbbell)',
'"EZ Bar Tricep Extension"': 'Triceps Extension (Barbell)',
'"Barbell Deep Squat"': 'Squat (Barbell)',
'"Barbell Deadlift"': 'Deadlift (Barbell)',
'"Barbell Stiff-Leg Deadlift"': 'Straight Leg Deadlift',
'"Leg Press"': 'Leg Press (Machine)',
'"Seated Leg Curl"': 'Seated Leg Curl (Machine)',
'"Leg Extension"': 'Leg Extension (Machine)',
'"Standing Calf Raise"': 'Seated Calf Raise',
'"Sit-Up"': 'Sit Up',
'"Pull-Up"': 'Pull Up',
'"Cable Seated Row"': 'Seated Cable Row - V Grip (Cable)',
'"Close Grip Front Lat Pulldown"': 'Lat Pulldown - Close Grip (Cable)',
'"Cable Rope Face Pull"': 'Face Pull',
'"Dumbbell One-Arm Row"': 'Dumbbell Row',
'"Dumbbell Lateral Raise"': 'Lateral Raise (Dumbbell)',
'"Barbell Front Squat"': 'Front Squat',
'"Barbell Romanian Deadlift"': 'Romanian Deadlift (Barbell)',
'"Machine Leg Extension"': 'Leg Extension (Machine)',
'"Machine Leg Press"': 'Leg Press (Machine)',
'"Machine Seated Leg Curl"': 'Seated Leg Curl (Machine)',
'"Machine Calf Raise"': 'Calf Press (Machine)',
'"Cable Front Lat Pulldown (Close Grip)"': '"Lat Pulldown - Close Grip (Cable)',
'"Cable Rope Tricep Pushdown"': 'Triceps Rope Pushdown',
'"Cable Tricep Kickback (Reverse Grip)"': 'Triceps Kickback (Cable)',
'"Dumbbell Incline Fly"': 'Incline Chest Fly (Dumbbell)',
'"Barbell Preacher Curl"': 'Preacher Curl (Barbell)',
'"Cable Lat Pulldown (Wide Grip)"': 'Lat Pulldown (Cable)',
'"Hack Squat"': 'Hack Squat',
'"Machine Leg Curl"': 'Seated Leg Curl (Machine)',
'"Barbell Standing Calf Raise"': 'Standing Calf Raise (Barbell)',
'"Barbell Seated Calf Raise"': 'Seated Calf Raise',
'"Donkey Calf Raise"': 'Seated Calf Raise',
'"Machine Leg Curl (Prone)"': 'Seated Leg Curl (Machine)',
'"Machine Bench Press"': 'Bench Press (Barbell)',
'"Push-Up"': 'Push Up',
'"Resistance Band Row"': 'Bent Over Row (Band)',
'"Plank"': 'Plank',
'"Band Bicep Curl "': 'Bicep Curl (Suspension)',
'"Crunch"': 'Crunch',
'"Cable Tricep Pushdown (Rope)"': 'Triceps Rope Pushdown',
}
out["Exercise Name"] = out["Exercise Name"].map(mapper)
Hi! I’ve created an open-source version of this project with additional updates, support for more exercises, and an improved script.
It’s public and open for contributions—let’s collaborate and make it even better!
Check it out here: https://github.com/sondrealf/JeFit2Hevy
Adapted this to work with StrengthLog's export: https://github.com/mburgs/strengthlog-hevy-converter
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
As multiple persons were requesting help I've decided to create this tool to help people migrate.
https://workout-converter.fly.dev/
If you liked it, feel free to buy me a coffee.